这是我正在使用的代码
public class aClass<T> {
private T[] elements;
public aClass(T[] elements) {
this.elements = elements;
}
public void doSomething() {
T[] newArray = (T[]) new Object[5];
...
}
}
我见过有人说创建这样的数组是个坏主意,因为它不是类型安全的。但是,每次我使用它时,我都没有遇到任何问题。什么时候创建这样的数组会导致问题?
谢谢
最佳答案
这是一个导致问题的例子:
public class Main {
public static class List<E extends Number> {
private E[] myE;
public void hello(E e) {
E[] newArray = (E[]) new Object[5];
for (int i = 0; i < newArray.length; i++) {
newArray[i] = e;
}
myE = newArray;
}
}
public static <T> T[] createArray(int size) {
return (T[]) new Object[size];
}
public static void main(String[] args) throws IOException {
List<Integer> integers = new List<Integer>();
integers.hello(5);
}
}
您的代码有效,因为当您声明通用参数时 <T>
它是未绑定(bind)的,这意味着它扩展了 Object
.当您将数组转换为 (T[])
时你实际上是转换到(Object[])
因为那是编译器能做的最好的事情。现在,如果您将数组保存在代码中,就不会有太多问题。但是,如果您的代码之外的某个人可以检索该数组并使用对象以外的类型实例化您的类,他将遇到 ClassCastException。
关于java - 通用数组创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10031771/