java - 创建 Optionals 的多维泛型数组

标签 java generics multidimensional-array option-type

我想创建一个包含 Optionals 的二维数组(是的,我知道这实际上是一个数组数组)。通用数组创建的常规方法不起作用,因为它因 ClassCastException 而失败。这是我的代码:

@SuppressWarnings("unchecked")
Optional<Integer>[][] arr = (Optional<Integer>[][]) new Object[5][5];

有没有一种方法可以创建这样的数组,如果有的话,方法是什么?

最佳答案

在 Java 中“创建泛型、参数化类型或类型参数的数组是非法的”。 “为什么创建泛型数组是非法的?因为它不是类型安全的。如果它是合法的,编译器在其他方面正确的程序中生成的转换可能会在运行时因 ClassCastException 而失败。这将违反由泛型类型系统。"[Joshua Bloch - Effective Java]

那么有什么解决方案能够创建多维数组呢?

推荐的方法是使用容器:

List<List<Optional<Integer>>> arr = new ArrayList<>();
for (int i = 0; i < 5; i++) {
    arr.add(new ArrayList<Optional<Integer>>());
}

关于java - 创建 Optionals 的多维泛型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54152572/

相关文章:

java - Eureka认证方法及UI

c# - 你能在 Controller 中使用泛型方法吗?

java - Java 中的泛型问题

c - 在C中初始化多维数组

JavaScript - 相同行和列中值的总和

java - 来自java程序的命令

java - 使用 gemfire 通过集群传输数据

java - 在泛型类中实现泛型接口(interface)

c - 如何在 C 中将文件中的单词存储在二维数组中

java - JAVA日期格式 "dd/MM/yyyy"和 "dd/mm/yyyy"有什么区别?