2015-05-06 44 views
2

我开始使用java反射工作我开始创建我自己的个人工作方法,其中包括一个方法,它接受一个类的所有setter方法。 现在我发现自己在想采取的设置方法的字段名的奇特现象,我努力让自己更清楚了例子:Java Reflection - 从设置的方法中获取字段的名称

private String urla; 
public setUrl(String urlb){ 
    this.urla = urlb; 
} 

我现在有获得方法“的方法setUrl”,我想创建一个方法,采取从它初始化设置方法的领域,像这样:

Mehtod method = getSetter(); //return method setUrl 
String nameField = getFieldFromSetter(method) //return "urla" 

你认为这是可能的吗? ty提前。

+4

我不认为这是可能的。 –

+0

只有在您将其称为'setUrla'而不是'setUrl'时,才有可能。 – EpicPandaForce

+0

如果你正确地给setter命名了'setUrla',你可以用null替换'set',并找到一个等于结果名称'Urla'的字段(但不区分大小写)。但是你可以保存每个变量的当前值(在一个HashMap中),调用函数,为所有变量创建一个新映射,计算映射之间的变化并重置变量。 (这不能工作,因为其他线程可以修改变量或同时访问它们,否则它应该没问题。另外,它更像是一种攻击而不是一个好方法:)) – Cyphrags

回答

3

通常,该字段与设置者的名称相匹配。通过这种方式,您可以按照惯例从引用者那里引用该字段的名称。

如果您需要查找实际字段集,则需要检查字节码。您可以从类加载器获取类的字节码,并使用类似ASM的库访问此字节码,并确定它设置的字段的名称。注意:这比按照惯例困难得多。

另一种方法是向setter添加注释,从中可以获取字段集的名称。

+1

是的,看起来这是唯一的方法,而ASM是一个不错的选择。 – 4535992