我在反思中从来没有真正坚强,我似乎对一个似乎微不足道的问题感到困惑,但事实并非如此。至少对于我来说。我有一个带有几个getter的bean,然后在一个服务中我使用Reflextion循环遍历所述方法,并且在某个时刻我最终得到了我想要的get方法。我调用方法来获取值,现在我想知道我刚才问过的字段的名称。有它被卡住的地方。
获取方法
public String getTest(){ return test }
通过反射调用方法
Object value = method.invoke(jsonObject, new Object[]{});
现在我喜欢做这样的事情
String fieldName = method.findTheNameOfTheField();
我发现很多例子都是从字段名中调用getter,但没有关于如何反向调用getter。如果不解析方法的名称,只是切割并从方法中获取,这是否可行?
答案 0 :(得分:3)
我调用方法来获取值,现在我想知道我刚才问过的字段的名称。
不,你不能这样做 - 至少没有分析字节码本身。不要忘记,getter可以包含任何代码。也许它不使用字段。也许它使用多个字段。也许所有属性都使用地图。也许它使用字段,但随后更改结果(例如复制列表)。
你应该考虑设计的改变是否会首先消除对此的需求 - 我不会想到很多情况下它会是一个好主意。
答案 1 :(得分:1)
对于使用JavaBeans,Bean Introspector使生活更轻松。
教程
http://v1.dione.zcu.cz/java/docs/tutorial/javabeans/introspection/index.html
实施例
http://www.java2s.com/Code/Java/Development-Class/IntrospectingaBean.htm
http://www.znetdevelopment.com/blogs/2012/04/11/java-bean-introspector-and-covariantgeneric-returns/
http://www.javablogging.com/inspecting-your-java-beans/
http://softwaresalariman.blogspot.co.uk/2011/11/minimal-javabean-introspection-example.html
这使用反射,但隐藏了许多细节,如;我是否需要getValue
或isFlag
作为获取者。
答案 2 :(得分:1)
这里唯一可以做的就是依赖JavaBean约定,即方法getFoo()
返回字段foo
的值。
答案 3 :(得分:0)
吸气剂可能不会必然返回一个场;这是一个非常简单的例子
public getAge() {
return currentdate - birthdate;
}
getter的重点在于他们可能返回一个字段,但他们也可能返回其他内容,从调用该方法的人那里抽象出内部逻辑。