返回信息流在以下的示例代码中,GenericArray类get方法会提示Warning:Type safety: Unchecked cast from Object to T。
在Thinking in Java中提到,Because of erasure, it can't know whether the cast is safe. T is erased to its first bound, which is Object by default, so get() is actually just casting an Object to an Object.
我想知道出现该warning的根本原因,到底怎么不安全了?
public class MyBitch {
String name;
int breast;
public MyBitch(String name, int breast) {
this.name = name;
this.breast = breast;
}
public void beFucked() {
System.out.println("comeon baby");
}
}
public class GenericArray<T> {
private Object[] array;
public GenericArray(int size){
array = new Object[size];
}
public void put(int index, T item) {
array[index] = item;
}
public T get(int index) {
return (T)array[index];
}
public static void main(String[] args) {
// TODO Auto-generated method stub
GenericArray<MyBitch> myBitch = new GenericArray<MyBitch>(3);
myBitch.put(0, new MyBitch("ashley",30));
MyBitch ashley= myBitch.get(0);
ashley.beFucked();
}
}
这是一条镜像帖。来源:北邮人论坛 / java / #24945同步于 2013/4/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[问题]Java泛型 类型转换问题
czxttkl
2013/4/30镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
}
- public class GenericArray<T> {
+ public class GenericArray<T extends Object> {
private Object[] array;
这样呢?
.....好像也不行……
Object向下转型成T肯定会有警告。java的泛型是通过擦除机制实现的(都被擦除为Object了),想使用T[] array的话需要在构造器中传入T的类型信息(Class<?>),然后调用Array.newInstance(Class<?>,length)初始化array。这样试试看:
private T[] array; public GenericArray(Class<?> type,int size){ array = Array.newInstance(type,size); }
【这个问题我记得算法导论泛型那一章肯定讲过了,如果上面代码通不过去,你就自己查查算法导论吧】