java - 检索类型类的字段

标签 java reflection

我有一个类将被传递到一个函数中,它将定义如下:

class ayy{

String blah;
Class a;
Class b;

}

我希望能够调用类 a 和 b 上的 getSimpleName() 方法。目前我正在这样做:

Class c = (Class)argument; // Where argument is the "ayy" class
c.getField("a").getSimpleName();

但这给了我一个错误,说“getSimpleName()”没有为类型字段定义。

最佳答案

您不能直接在反射产生的对象上调用方法,例如您使用 Field 所做的那样,就好像它是所需类型的引用变量一样。

相反,您需要调用 getDeclaredField ,因为getField only gets public fields 。此外,您还需要 get() the value of the Field ,传入 ayy 类的实例,该实例将返回 Field 的值。然后,您需要将其转换为 Class,因为 get() 返回一个 Object。然后您可以调用getSimpleName()

Class<?> classOfA = (Class<?>) c.getDeclaredField("a").get(anAyy);
String simpleName = classOfA.getSimpleName();

您还需要捕获可能引发的各种与反射相关的异常。

关于java - 检索类型类的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32060703/

相关文章:

java - 如何使用 void display() 在 java 中显示多个输入?

java拦截器不拦截

java - 如何验证 "@"符号的字符串并传递给 if 语句

java - 如何将 Java 对象(bean)转换为键值对(反之亦然)?

java - 使用 Spring Test 执行 SQL 脚本正在提交更改

java - 将文件中的单词替换为新的文件内容

c# - 如何在运行时从类中删除属性

objective-c - 有没有办法将整个参数列表传递给 Objective C 中的另一个方法?

Go:再次将类型为 uuid.UUID (satori) 的 reflect.Value 转换回 uuid.UUID

c# - 是否可以从 PropertyInfo 获取 'object'?