- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Java 新手,我正在使用当前版本的 BlueJ 进行编程。当尝试初始化包含一周中所有日期的字符串数组时,我收到错误消息“通用数组创建”,我很好奇如何解决这个问题,因为我在网上找到的所有结果都非常旧并且超出了日期。该代码用于还可以跟踪星期几的时钟。我的代码如下:
daysOfWeek = new ArrayList<String>[]{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
我非常乐意用提供帮助所需的任何其他信息来更新这篇文章。感谢您抽出时间。
最佳答案
从 Java 13 开始,通用数组创建仍然被禁止。原因与数组在运行时知道其组件类型这一事实有关,但泛型会遭受所谓的 type-erasure 的困扰。 。也就是说,您的问题有以下示例:
daysOfWeek = new ArrayList<String>[]{"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
上面试图创建一个 ArrayList<String>[]
;换句话说,是数组列表的数组。这很可能不是您真正想要做的。尽管名字ArrayList
,该类并不直接参与数组的创建,该名称仅表示该列表由数组支持。鉴于您的数据只是一周中每一天的名称,您可能想要的是 String[]
或List<String>
:
// array
String[] daysOfWeek = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
// list
List<String> daysOfWeek = new ArrayList<>(List.of("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"));
请注意,如果您不使用 Java 11+,则可以替换为 List#of
与 Arrays#asList(T...)
。如果您使用的是 Java 11+,请考虑使用 List#of
的结果直接,而不是将结果复制到可修改的 ArrayList
中(假设您不打算修改该列表)。
您可能还想考虑使用 java.time.DayOfWeek
枚举而不是 String
代表一周中的每一天。枚举类型更加安全,不易出错,并且允许与任何其他对象轻松交互 java.time
您可能使用的类。
List<DayOfWeek> daysOfWeek = List.of(DayOfWeek.values());
<小时/>
您应该始终默认使用 List
(或其他一些集合)在使用数组之前。如果您绝对必须使用数组,则可以使用以下方法解决“通用数组创建”错误:
// unbounded T
@SuppressWarnings("unchecked")
T[] array = (T[]) new Object[size];
// or if, for instance, T is upper-bounded by CharSequence
@SuppressWarnings("unchecked")
T[] array = (T[]) new CharSequence[size];
// or if the component type is itself generic
@SuppressWarnings("unchecked")
Comparator<String>[] array = (Comparator<String>[]) new Comparator[size];
但是,以上所有内容都只是编译时技巧。每个数组仍然允许存储作为原始组件类型实例的任何对象,而不会抛出 ArrayStoreException
在运行时。换句话说,第一个数组仍将接受任何 Object
,第二个数组仍将接受任何 CharSequence
,第三个数组仍将接受任何 Comparator<?>
。这就是为什么对上述每一项都会发出“未经检查的强制转换”警告的原因;也就是说,如果没有 @SuppressWarnings("unchecked")
存在注释。
关于Java 11+ "generic array creation"错误(使用 BlueJ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58054709/
我有一个简单的主要方法,其中包括数十个“System.out.print”,如下所示: public class StudentTester { public static void main
我有一个简单的 main 方法,其中包含数十个“System.out.print”,如下所示: public class StudentTester { public static void
我使用 BlueJ 已经超过 5 年了。但是当涉及到游戏开发时,我确实需要代码完整功能,因为它变得困难了。为此,我必须切换到 Eclipse 或 Sublime。 我也知道 Ctrl+Space 会触
我目前正在使用 BlueJ 进行编程。是否有首选项/选项菜单可以将字体更改为 Courier 之类的字体? 这有点微不足道,但我在谷歌上找不到任何东西。 最佳答案 我已经在 3.1.6 版本上试过了,
我目前正在使用 BlueJ 进行编程。是否有首选项/选项菜单可以将字体更改为 Courier 之类的字体? 这有点微不足道,但我在谷歌上找不到任何东西。 最佳答案 我已经在 3.1.6 版本上试过了,
我使用“创建 Jar 文件...”选项并选择我的主类。当我尝试从 Jar 执行程序时,我的 JOptionPane 窗口将显示,但程序将在那里结束,而不显示我的 JFrame。我尝试将 jar 放入项
尝试使用 BlueJ 构建我的第一个 Java MySQL CRUD 应用程序。我可以运行该应用程序并将数据写入 MySQL 数据库。但是,当我运行搜索函数时,我得到了 Java .NullPoint
我在 Blue J 中为我的作业创建了一个带有数组列表的类,它可以编译,但我不知道如何测试它。对于诸如 之类的方法,我必须在方法调用中输入什么(参数?) public void addJob(Job
public class Hello { public static void main(int a) { switch (a) { case 1: Syste
我需要创建一个可以加、减、乘、除、绝对值和舍入的计算器。这是我到目前为止所拥有的 import java.util.Scanner; public class Calculator { pub
我又有一个计算机科学问题。我正在做一个 AP 计算机科学实验室,其中我们有 2 个框架代码、一个测试器类和一个接口(interface)类。我们的工作是让测试仪运行时没有错误。我得到的代码是一个三角形
所以我最近一直在使用最新版本的 Bluej 学习 java,因为有人告诉我这将是一个很好的起点。我已经完成了通常的 Hello World,学习如何获取和设置、数组和数组列表等...我决定尝试一下简单
我正在尝试在 BlueJ 中为矩形类编写代码。当我编译代码时,出现错误“矩形类中的构造函数矩形不能应用于给定类型;必需:无参数;发现:int,int,int,int;原因:实际和形式参数列表的长度不同
问题是这样的(import java.*;)。我一直在 youtube 上观看一些关于框架和 eclipse 刻的教程。我一直在复制他的代码。我想知道为什么这种情况只发生在我身上。我在 IDE 中使用
我的 BlueJ 在条件语句 if 中运行了错误的行。我的程序是: import java.io.*; public class version_check { public static v
我正在使用 jid3 库从 mp3 文件中提取信息。我已经下载了该 jar 并将其添加到 BlueJ 库中。 我的导入行如下 import org.blinkenlights.jid3.*; impo
我目前正在摆弄 BlueJ,并尝试让对象之间进行交互。我已经创建了一个帐户和帐户列表类。帐户列表允许您添加帐户对象,然后将其放入数组列表中。 通过索引从数组中删除这些帐户很容易,使用 for 循环来获
我想在 bluej 上为学校项目打印一些程序。当我单击打印按钮并将纸张尺寸设置为 A4 并输入“确定”时,打印结果会出现在一个奇怪的小盒子中。我尝试增大字体大小。没有发生任何变化。我还将页面类型更改为
您好,我遇到了一个程序问题,该程序应该接受一个字符串,然后使用 Character Wrapper 类将每个单词的首字母大写。 import java.util.*; public class wr
我写了下面的代码: import java.io.*; public class Typer { public static void main(String[] args) {
我是一名优秀的程序员,十分优秀!