我有一个类型参数化方法,但是我不能在类型参数化参数上调用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)
类对象。)
编辑这不是上述问题的重复,因为我的课程没有参数化,只有我的方法。
答案 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;社区维基