因此,在通过反射获得方法的参数后:
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());
假设我们拥有的方法的参数是一个名为“ PlayerDeathEvent”的类,该类扩展了抽象的“ Event”类。
话虽这么说,输出将是:
java.lang.Class
org.mypackage.Event
有这种情况发生的原因吗?我使用getCanonicalName找到了解决此问题的方法,但是我很好奇为什么会发生这种情况。
最佳答案
返回实例的getClass()
对象的Object
method is a method in Class
。您有一个Class
对象,因此getClass()
返回Class
类的Class
对象-与Class
实例不同的par
。
但是,getSuperclass()
method, defined in Class
返回类超类的Class
对象,而不是Class
返回的getClass()
的超类。
要获取PlayerDeathEvent
,请改为调用getName()
。
System.out.println(par.getName());