检索类型类的字段

时间:2015-08-17 22:26:25

标签: 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()“。

1 个答案:

答案 0 :(得分:2)

您无法直接在反射产生的对象上调用方法,例如您正在使用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();

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