Java泛型问题

时间:2011-07-25 00:15:12

标签: java generics

我有一个班级

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类型的东西。这可能吗?如果是这样,有人能指出我正确的方向吗?

谢谢!

2 个答案:

答案 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值。

如果不了解更多情境,那么任何人都无法做到。