我在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());
但它不起作用。谢谢你的任何建议。
答案 0 :(得分:0)
T
代表类型参数,它会被“类型删除”,因此newInstance
和getClass().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.class
,MyClassV2.class
或MyClassV3.class
作为第二个参数。
现在您使用classArg
代替T
,代码按预期工作。