When I write generic class in Java, I use below code
public ResizableArray() {
this.count=0;
this.elements = (T[]) new Object[0];
}
However I get a warning:
Type Safety: Unchecked Cast from Object[] to T[]
Why do I get this warning?
When I write generic class in Java, I use below code
public ResizableArray() {
this.count=0;
this.elements = (T[]) new Object[0];
}
However I get a warning:
Type Safety: Unchecked Cast from Object[] to T[]
Why do I get this warning?
您正在创建一个 Object[] (即“Object”类的实例数组,因此基本上是一个任何东西的数组)。您将其转换为 T[] (这是一个只能包含 T 类实例的数组)。您不测试数组中的对象(我知道没有,但编译器没有)实际上是否是 T - 如果不是,则强制转换将在运行时抛出 ClassCastException。这就是你收到警告的原因。
如果T
是其他任何东西Object
,那么您基本上是在沮丧地撒谎。这是因为 Java 数组的类型与泛型类型不同,它是具体化的。换句话说,
boolean isStringArray(Object[] os) { return os instanceof String[]; }
用
System.out.println(isStringArray(new Object[]));
实际打印false
:运行时知道数组的组件类型。
您真正想做的是return new T[]
,但您可能已经发现这是不允许的,并且由于上述泛型和数组类型之间的完全不匹配而不允许这样做。