0

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?

4

2 回答 2

2

您正在创建一个 Object[] (即“Object”类的实例数组,因此基本上是一个任何东西的数组)。您将其转换为 T[] (这是一个只能包含 T 类实例的数组)。您不测试数组中的对象(我知道没有,但编译器没有)实际上是否是 T - 如果不是,则强制转换将在运行时抛出 ClassCastException。这就是你收到警告的原因。

于 2013-11-03T19:43:43.703 回答
1

如果T是其他任何东西Object,那么您基本上是在沮丧地撒谎。这是因为 Java 数组的类型与泛型类型不同,它是具体化的。换句话说,

boolean isStringArray(Object[] os) { return os instanceof String[]; }

System.out.println(isStringArray(new Object[]));

实际打印false:运行时知道数组的组件类型。

您真正想做的是return new T[],但您可能已经发现这是不允许的,并且由于上述泛型和数组类型之间的完全不匹配而不允许这样做。

于 2013-11-03T19:52:06.680 回答