Java将对象的实例类型传递给泛型类类型参数

Java将对象的实例类型传递给泛型类类型参数,java,object,generics,type-parameter,instancetype,Java,Object,Generics,Type Parameter,Instancetype,是否可以将对象实例类型作为泛型的类型参数传递?如下所示: 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;

是否可以将对象实例类型作为泛型的类型参数传递?如下所示:

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;
    }
}
objectobj=newdouble(3.14)//实例类型双
//我能做以下几件事吗?
项目=新项目(obj);
公共类项目{
私人物品;
公共项目(T项目){
this.item=项目
}
公共T getItem(){
退回此项目;
}
}

否。。泛型类型应在编译时已知

泛型用于在编译时捕获可能的运行时异常

List<Integer> list = new ArrayList<Integer>();
//..some code
String s = list.get(0); // this generates compilation error
List List=new ArrayList();
//…一些代码
字符串s=list.get(0);//这将生成编译错误

因为编译器知道
list
仅用于存储
Integer
对象,所以将从list获得的值赋给
String
肯定是一个错误。如果泛型类型是在运行时确定的,这将很困难。

泛型是在编译时解析的,因此不起作用(编译器需要执行该代码才能知道结果,这显然是不可能的,因为它仍在编译:p).

Java中存在泛型的原因是为了在编译时捕获更多错误。正是因为这个原因,类型需要在编译时进行强定义,否则它们就没用了


下面是关于泛型的一个非常好的学习经验:

你所做的有什么意义?你想完成什么?为什么不这样做:

Item<Object> item = new Item<Object>(obj);
项目=新项目(obj);

+1-唯一正确的答案。(是的,类型信息会被删除,因此您通常无法找到
t
绑定到的类型。但即使不是这样,您仍然无法使用作为运行时值的参数类“实例化”泛型类型。这将使泛型的静态类型无法实现。)