如何通过metainfo引用类字段(就像.class一样)

时间:2013-06-17 14:37:59

标签: java reflection

我不知道很多关于java反射的事情,但有没有办法(或者如果不是为什么不)在java中引用类字段而不是简单的字符串,如

myClass.class.getField ("myField")

而是执行类似这样的操作,可以由编译器检查:

myClass.class.getField (myField.field) 

或者我不知道也许

myClass.class.getField (myClass.myField.field)

所以我的目标是引用一个字段(私有或其他),编译器可以检查它是否存在,就像你可以引用一个类,编译器可以检查它是否存在。

4 个答案:

答案 0 :(得分:2)

不,Java中没有任何内容允许这样做。是的,这会很好 - 但目前还不存在。

我们最接近的是Java 8中方法文字的承诺,在一般的lambda表达式功能中,但据我所知,这不适用于字段。

答案 1 :(得分:1)

我认为你错过了反思点。

来自Oracle Trail

  

反射通常由程序使用,这些程序需要能够检查或修改在Java虚拟机中运行的应用程序的运行时行为。 ...

Reflection允许应用程序在运行时期间检查自身。因此,编译时检查不是使用反射时得到的。

但是,您可以在访问代码之前检查代码中是否存在字段。

答案 2 :(得分:1)

你几乎可以这样做:

Field field = myClass.class.getField (someField.getName());

答案 3 :(得分:0)

getField Class方法 需要一个String,所以你必须提供字段的String名称。

您可以做的是首先调用getFields()方法,然后调用这些字段。以下是实现它的步骤:

  1. 致电Class.getFields(),这将返回Field数组。
  2. 现在您有一个在您的班级中确定存在的字段列表,因此您可以拨打电话getField(field.getName())