首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getClass()返回java.lang.Class [反射]

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

Stack Overflow用户
提问于 2014-07-24 21:37:00
回答 2查看 4.3K关注 0票数 2

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

代码语言:javascript
复制
Class<?>[] params = m.getParameterTypes();

假设我循环遍历方法,并寻找一个只有一个参数的方法:

代码语言:javascript
复制
if(params.length > 1) {
     continue;
}

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

代码语言:javascript
复制
Class<?> par = params[0];

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

但是,当我使用getSuperclass()方法获得超类时,它会返回超类。

例如:

代码语言:javascript
复制
System.out.println(par.getClass());
System.out.println(par.getSuperclass());

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

话虽如此,产出将是:

代码语言:javascript
复制
java.lang.Class
org.mypackage.Event

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-24 21:40:38

返回实例的Object对象。您有一个Class对象,所以getClass()返回Class类的Class对象--与par的实例不同的Class

但是,Class返回类的超类的Class对象,而不是getClass()返回的Class的对象。

要获得PlayerDeathEvent,请调用getName()

代码语言:javascript
复制
System.out.println(par.getName());
票数 8
EN

Stack Overflow用户

发布于 2014-07-24 21:44:36

parClass在这里的一个对象:

代码语言:javascript
复制
Class<?> par = params[0];

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

所以如果sString

代码语言:javascript
复制
String s = "test";

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

另一方面,getSuperClass被定义为java.lang.Class,它返回要表示的类的超类。

因此,如果s是一个String,而c是一个包含反射Class的类

代码语言:javascript
复制
String s = "test";
Class c = s.getClass();

s.getClass返回String

c.getSuperClass返回Object,因为ObjectString的超类。

c.getName返回String

c.getClass返回Class

你可能在找getName()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24944431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档