[英]Type Safety: Unchecked Cast from Object[] to T[]
当我用Java编写泛型类时,我使用以下代码
public ResizableArray() {
this.count=0;
this.elements = (T[]) new Object[0];
}
但是我得到一个警告:
类型安全性:未经检查的从Object []到T []的转换
为什么会收到此警告?
您正在创建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[]
,但是您可能发现这是不允许的,并且由于上述泛型和数组类型之间的不匹配,所以不允许这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.