我想创建一个包含 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/