繁体   English   中英

类型安全性:未经检查的从Object []到T []的转换

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM