因此,在通过反射获取方法的参数时:
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中找到了解决这个问题的方法,但是我很好奇为什么会发生这种情况。
发布于 2014-07-24 21:40:38
返回实例的Object对象。您有一个Class对象,所以getClass()返回Class类的Class对象--与par的实例不同的Class。
但是,Class返回类的超类的Class对象,而不是getClass()返回的Class的对象。
要获得PlayerDeathEvent,请调用getName()。
System.out.println(par.getName());发布于 2014-07-24 21:44:36
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()
https://stackoverflow.com/questions/24944431
复制相似问题