假设我有以下代码

E[] arrayVar = (E[])new Object[1];// It causes a compiler warning


问题是,在什么情况下代码会导致运行时错误,

最佳答案

如果您尝试将结果分配给化的E类型,则该代码只会导致运行时错误:

createArray(); // no exception
String[] arr = createArray(); // causes ClassCastException

public static <E> E[] createArray() {
    return (E[]) new Object[1];
}


创建通用数组的安全方法是使用Array.newInstance

public static <E> E[] createArray(Class<E> component) {
    return (E[]) Array.newInstance(component, 1);
}


此方法不会导致ClassCastException

07-24 03:11