因此,通过Reflection获取方法的参数:
Class<?>[] params = m.getParameterTypes();
假设我循环遍历方法并寻找只有一个参数的方法:
if(params.length > 1) {
continue;
}
如果params数组的长度为1,则获取该参数:
Class<?> par = params[0];
当我尝试使用getClass()方法打印参数的类时,它返回java.lang.Class。
但是,当我使用getSuperclass()方法获取超类时,它会返回超类。
例如:
System.out.println(par.getClass());
System.out.println(par.getSuperclass());
假设我们所拥有的方法的参数是一个名为&#34; PlayerDeathEvent&#34;的类,它扩展了抽象&#34;事件&#34;类。
话虽如此,输出将是:
java.lang.Class
org.mypackage.Event
有没有理由发生这种情况?我用getCanonicalName找到了解决这个问题的方法,但我很好奇为什么会这样。
答案 0 :(得分:7)
返回实例的Class
对象的getClass()
method is a method in Object
。您有一个Class
对象,因此getClass()
会返回Class
类的Class
对象 - 与Class
不同par
。的实例。
但是,getSuperclass()
method, defined in Class
会返回该类超类的Class
对象,而不是Class
返回的getClass()
。
要获得PlayerDeathEvent
,请改为呼叫getName()
。
System.out.println(par.getName());
答案 1 :(得分:1)
par
是Class
的对象:
Class<?> par = params[0];
getClass
来自java.lang.Object
。它返回对象的类(类型)。
所以,如果s
是String
String s = "test";
s.getClass
返回String"
。
按照相同的逻辑,par.getClass()
返回Class
。
getSuperClass
定义为java.lang.Class
,它返回所表示的类的超类。
所以如果s
是String
,而c是一个包含反思Class
的类:
String s = "test";
Class c = s.getClass();
s.getClass
返回String
c.getSuperClass
返回Object
,因为Object
是String
的超类
c.getName
返回String
和
c.getClass
返回Class
你可能正在寻找
getName()