如何从方法的类型参数中获取Class对象?

时间:2016-09-18 09:42:00

标签: java generics reflection

我有一个类型参数化方法,但是我不能在类型参数化参数上调用getClass,因为它可以是null,所以我看到的唯一解决方案是获取{{1从类型参数本身,以某种方式:

Class

此方法只是说明了问题。我的实际方法甚至不返回参数的类,而是以不同的方式使用它。问题的核心是:有没有办法获得代表我方法参数的参数化类型的public <T> Class myMethod(T obj) { //can't do this: return obj.getClass() because null is permitted. } 对象,而不使用Class(因为如果obj是obj.getClass(),我仍然需要知道调用的方法是什么类型参数,例如:null必须返回<String>myMethod(null)类对象。)

编辑这不是上述问题的重复,因为我的课程没有参数化,只有我的方法。

2 个答案:

答案 0 :(得分:2)

  

问题的核心是:有没有办法让Class对象代表我方法的参数化类型参数[...]

没有。 Class不包含有关类型参数值的任何信息。 Class仅包含有关类的定义的数据,但不包含类型的使用。事实上,由于类型擦除,您无法获得有关类型参数的此类信息(请参阅https://docs.oracle.com/javase/tutorial/java/generics/genMethods.html(方法)和https://docs.oracle.com/javase/tutorial/java/generics/genTypes.html(类型))。

答案 1 :(得分:0)

解决方案是将方法重构为:

b[4]

但是调用者已经知道T是什么,所以真正的问题是,你为什么需要它。

=&GT;社区维基