我有一个将被传递给函数的类,它将被定义如下:
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()“。
答案 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();
您还需要捕获可能引发的各种与反射相关的异常。