gpt4 book ai didi

java - getClass() 返回 java.lang.Class [反射(reflection)]

转载 作者:行者123 更新时间:2023-11-29 10:13:37 26 4
gpt4 key购买 nike

因此在通过反射获取方法的参数时:

Class<?>[] params = m.getParameterTypes();

假设我正在遍历方法并寻找只有一个参数的方法:

if(params.length > 1) {
continue;
}

如果 params 数组的长度为 1,则获取该参数:

Class<?> par = params[0];

当我尝试使用 getClass() 方法打印出参数的类时,它返回 java.lang.Class。

但是,当我使用 getSuperclass() 方法获取父类(super class)时,它会返回父类(super class)。

例如:

System.out.println(par.getClass());
System.out.println(par.getSuperclass());

假设我们的方法的参数是一个名为“PlayerDeathEvent”的类,它扩展了抽象的“Event”类。

也就是说,输出将是:

java.lang.Class
org.mypackage.Event

发生这种情况是否有原因?我使用 getCanonicalName 找到了解决此问题的方法,但我很好奇为什么会发生这种情况。

最佳答案

getClass() method is a method in Object返回实例的 Class 对象。您有一个 Class 对象,因此 getClass() 返回 Class 类的 Class 对象——一个不同的Classpar 的一个实例。

然而,getSuperclass() method, defined in Class , 返回类的父类(super class)的 Class 对象,而不是 getClass() 返回的 Class 对象。

要获取 PlayerDeathEvent,请调用 getName()相反。

System.out.println(par.getName());

关于java - getClass() 返回 java.lang.Class [反射(reflection)],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24944431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com