Java Pass实例类型的Object为泛型类类型参数

时间:2013-06-12 16:23:37

标签: java object generics type-parameter instancetype

是否可以将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;
    }
}

4 个答案:

答案 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);