泛型函数使用的“类型参数”的“类类型”

时间:2017-04-21 20:55:24

标签: java templates generics inheritance

我在Java中编写了以下泛型函数:

public <T extends MyClass> void loadProperties(String in_strPath)
{
   // ...
}

类型T可以是3个不同类中的任何一个,它们是MyClass的子类。我们称这三个类为MyClassV1,MyClassV2和MyClassV3。我想从whithin loadProperties打印与T对应的类的名称。我试过这样做:

Class<T> c = T.class;
T instance = c.newInstace();
System.out.println(instance.getClass().getName());

但它不起作用。谢谢你的任何建议。

1 个答案:

答案 0 :(得分:0)

T代表类型参数,它会被“类型删除”,因此newInstancegetClass().getName()都不会产生所需的结果。

为了完成这项工作,您需要遵循一个惯用法 - 将Class<T>作为常规参数传递给您的方法。

public <T extends MyClass> void loadProperties(String in_strPath, Class<T> classArg) {
    ...
    T instance = classArg.newInstance();
    System.out.println(instance.getClass().getName());
}

来电者需要传递MyClassV1.classMyClassV2.classMyClassV3.class作为第二个参数。

现在您使用classArg代替T,代码按预期工作。