我有一个班级
public abstract class FakeClass<T extends MyClass> {
protected HashMap<Character, T> myMap;
private void myMethod(){
myMap.put('c', /*???? I need to instatiate something of type T here.*/)
}
}
正如您所看到的,我无法弄清楚如何实例化T类型的东西。这可能吗?如果是这样,有人能指出我正确的方向吗?
谢谢!
答案 0 :(得分:7)
这只能通过将有关T的一些信息传递给myMethod()
来完成。 this thread中描述的一种方法是传递T
的工厂对象。 this thread中描述的一个特殊情况是将Class<T> type
参数传递给myMethod()
,然后可以使用type.newInstance()
使用默认构造函数创建新的T对象。 (如果T没有默认构造函数,这将失败。)Class
对象充当T
的工厂对象。
我们需要这一切的原因是由于Java中的type erasure。
答案 1 :(得分:0)
通常,泛型的要点是能够接受未知的编译时类型作为输入。
您无法实例化未知类(因为它可能没有可见的构造函数)。
如果您只需要占位符放入地图,则可以设置null
值。
如果不了解更多情境,那么任何人都无法做到。