【发布时间】:2014-09-16 15:23:26
【问题描述】:
所以在通过反射获取方法的参数时:
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()和getSuperclass()。par已经是一个 java.lang.Class 对象。只需System.out.println(par);。 -
明确地说“停止调用”这些方法是一个糟糕的评论。
-
我很抱歉。如果可以的话,我会编辑它。
标签: java reflection