1

我的反思从来都不是很强烈,我似乎在一个看似微不足道但结果并非如此的问题上遇到了困难。至少对我来说。我有一个带有几个 getter 的 bean,然后在服务中我使用 Reflextion 循环遍历所述方法,并在某个时刻得到我想要的 get 方法。我调用该方法来获取值,现在我想知道我刚刚从其中询问值的字段的名称。这是我卡住的地方。

获取方法

public String getTest(){ return test }

通过反射调用方法

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

现在我喜欢做这样的事情

String fieldName = method.findTheNameOfTheField();

我找到了很多从字段名调用 getter 的例子,但没有关于如何做相反的事情。这甚至可以不解析方法的名称而只是切割是和从方法中获取?

4

4 回答 4

3

我调用该方法来获取值,现在我想知道我刚刚从其中询问值的字段的名称。

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

您应该首先考虑对您的设计进行更改是否会消除对此的需求 - 我想不出很多情况下这是一个好主意。

于 2012-08-10T09:47:01.807 回答
1

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

于 2012-08-10T12:09:28.120 回答
0

getter 不一定要返回一个字段;这是一个非常简单的例子

public getAge() {
  return currentdate - birthdate;
}

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

于 2012-08-10T15:11:44.100 回答