getClass()返回java.lang.Class [Reflection]

时间:2014-07-24 21:37:00

标签: java reflection

因此,通过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找到了解决这个问题的方法,但我很好奇为什么会这样。

2 个答案:

答案 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)

parClass的对象:

Class<?> par = params[0];

getClass来自java.lang.Object。它返回对象的类(类型)。

所以,如果sString

String s = "test";

s.getClass返回String"。 按照相同的逻辑,par.getClass()返回Class

另一方面,

getSuperClass定义为java.lang.Class,它返回所表示的类的超类。

所以如果sString,而c是一个包含反思Class的类:

String s = "test";
Class c = s.getClass();

s.getClass返回String
c.getSuperClass返回Object,因为ObjectString的超类
c.getName返回String
c.getClass返回Class


你可能正在寻找 getName()