是否可以将Objects实例类型作为泛型的类型参数传递?如下所示:
Object obj = new Double(3.14); //Instance type Double
//Could I do the following?
Item<obj.getInstanceType()> item = new Item<obj.getInstanceType()>(obj);
public class Item<T> {
private T item;
public Item(T item) {
this.item = item
}
public T getItem() {
return this.item;
}
}
答案 0 :(得分:5)
No ..泛型类型应该在编译时知道。
泛型可以在编译时捕获可能的运行时异常。
List<Integer> list = new ArrayList<Integer>();
//..some code
String s = list.get(0); // this generates compilation error
因为编译器知道list
仅用于存储Integer
个对象,并且将从列表中获取的值分配给String
绝对是一个错误。如果在运行时确定泛型类型,那将很困难。
答案 1 :(得分:1)
Java中存在泛型的原因是在编译时可以捕获更多错误。因此,需要在编译时强烈定义类型,否则它们是无用的。
以下是关于泛型的非常好的学习体验:http://docs.oracle.com/javase/tutorial/java/generics/
答案 2 :(得分:0)
泛型在编译时被解析,因此不起作用(编译器需要执行该代码才能知道结果,显然这是不可能的,因为它仍然在编译:P)。
答案 3 :(得分:0)
你在做什么有什么意义?你想达到什么目的?为什么不这样做:
Item<Object> item = new Item<Object>(obj);