通过反射获取getter的fieldname

时间:2012-08-10 09:44:51

标签: java reflection

我在反思中从来没有真正坚强,我似乎对一个似乎微不足道的问题感到困惑,但事实并非如此。至少对于我来说。我有一个带有几个getter的bean,然后在一个服务中我使用Reflextion循环遍历所述方法,并且在某个时刻我最终得到了我想要的get方法。我调用方法来获取值,现在我想知道我刚才问过的字段的名称。有它被卡住的地方。

获取方法

public String getTest(){ return test }

通过反射调用方法

Object value = method.invoke(jsonObject, new Object[]{});

现在我喜欢做这样的事情

String fieldName = method.findTheNameOfTheField();

我发现很多例子都是从字段名中调用getter,但没有关于如何反向调用getter。如果不解析方法的名称,只是切割并从方法中获取,这是否可行?

4 个答案:

答案 0 :(得分:3)

  

我调用方法来获取值,现在我想知道我刚才问过的字段的名称。

不,你不能这样做 - 至少没有分析字节码本身。不要忘记,getter可以包含任何代码。也许它不使用字段。也许它使用多个字段。也许所有属性都使用地图。也许它使用字段,但随后更改结果(例如复制列表)。

你应该考虑设计的改变是否会首先消除对此的需求 - 我不会想到很多情况下它会是一个好主意。

答案 1 :(得分:1)

答案 2 :(得分:1)

这里唯一可以做的就是依赖JavaBean约定,即方法getFoo()返回字段foo的值。

答案 3 :(得分:0)

吸气剂可能不会必然返回一个场;这是一个非常简单的例子

public getAge() {
  return currentdate - birthdate;
}

getter的重点在于他们可能返回一个字段,但他们也可能返回其他内容,从调用该方法的人那里抽象出内部逻辑。