gpt4 book ai didi

java - 在编译时捕获 ArrayStoreException

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:56:02 26 4
gpt4 key购买 nike

考虑以下对 Java 的 ArrayList#toArray 方法的测试。请注意,我借用了这个有用的代码 answer .

public class GenericTest {
public static void main(String [] args) {
ArrayList<Integer> foo = new ArrayList<Integer>();
foo.add(1);
foo.add(2);
foo.add(3);
foo.add(4);
foo.add(5);
Integer[] bar = foo.toArray(new Integer[10]);
System.out.println("bar.length: " + bar.length);

for(Integer b : bar) { System.out.println(b); }

String[] baz = foo.toArray(new String[10]); // ArrayStoreException
System.out.println("baz.length: " + baz.length);
}
}

但是,请注意,当尝试将 Integer 放入 String[] 时,将会出现 ArrayStoreException

输出:

$>javac GenericTest.java && java -cp . GenericTest
bar.length: 10
1
2
3
4
5
null
null
null
null
null
Exception in thread "main" java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at java.util.ArrayList.toArray(Unknown Source)
at GenericTest.main(GenericTest.java:16)

是否可以在编译时通过 Java 泛型来避免此错误?

最佳答案

ArrayStoreException 之所以存在正是因为 Java 的类型系统无法正确处理这种情况(IIRC,当泛型出现时,以与集合框架相同的方式改造数组已经太晚了)。

所以你不能在编译时一般地防止这个问题。

您当然可以创建内部 API 来包装此类操作,以减少意外错误类型的可能性。

另见:

关于java - 在编译时捕获 ArrayStoreException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21859099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com