2

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

4 回答 4

5

不......泛型类型应该在编译时知道。

泛型可以在编译时捕获可能的运行时异常。

List<Integer> list = new ArrayList<Integer>();
//..some code
String s = list.get(0); // this generates compilation error

因为编译器知道这list意味着只存储Integer对象并将从列表中获得的值分配给String绝对是一个错误。如果泛型类型是在运行时确定的,这将是困难的。

于 2013-06-12T16:25:17.837 回答
1

Java 中存在泛型的原因是可以在编译时捕获更多错误。正是由于这个原因,类型需要在编译时被强定义,否则它们是无用的。

这是一个非常好的泛型学习经验:http: //docs.oracle.com/javase/tutorial/java/generics/

于 2013-06-12T16:26:47.243 回答
0

你在做什么有什么意义?你想达到什么目的?为什么不这样做:

Item<Object> item = new Item<Object>(obj);
于 2013-06-12T23:53:24.530 回答
0

泛型在编译时被解析,因此无法工作(编译器需要执行该代码才能知道结果,这显然是不可能的,因为它仍在编译:P)。

于 2013-06-12T16:25:59.717 回答