2

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

myClass.class.getField ("myField")

而是做这样的事情,可以由编译器检查:

myClass.class.getField (myField.field) 

或者我不知道

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

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

4

4 回答 4

2

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

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

于 2013-06-17T14:41:38.937 回答
1

我认为您缺少反思的重点。

甲骨文追踪

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

反射允许应用程序在运行时检查自身。所以编译时检查不是使用反射时得到的。

不过,您可以在运行时检查代码中是否存在字段,然后再访问它。

于 2013-06-17T14:43:31.790 回答
1

你几乎可以做到:

Field field = myClass.class.getField (someField.getName());
于 2013-06-17T14:43:43.687 回答
0

getField的方法Class 需要一个 String ,因此您必须提供该字段的 String 名称。

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

  1. 调用Class.getFields()which 将返回Field数组。
  2. 现在您有一个在您的班级中肯定存在的字段列表,因此您可以拨打电话getField(field.getName())
于 2013-06-17T14:42:12.080 回答