我有一个名为 MyClass 的类。它有许多 MyField 类型的字段。如何返回对名称与字符串值匹配的特定字段的引用?
public class MyClass{
public MyField field1;
public MyField field2;
public MyField field3;
public MyField whichField(String nameOfField){
//e.g. String = "field3", then return field3
//of course I can do if else, but it will be tedious If I have long list of MyField fields, can I iterate over all field names, and return whose name matches?
}
}
<小时/>
编辑
我尝试从下面的答案中进行反射(reflection),我创建了一个临时占位符,并且我希望重新声明它,但是,
MyField temp = MyClass.class.getDeclaredField(whichFieldString);
不起作用,我收到类型不匹配,无法转换错误
我该如何转换这个? 如何返回该字段?
最佳答案
作为替代方案:
如果所有字段都具有相同类型并且通过字段名称访问(大多数情况下),您可以通过利用 Map
来避免使用反射的麻烦和脆弱性。 。
映射将键(在您的情况下为“字段名称”)与值相关联。 MyClass 看起来像这样,而不是任意数量的字段:
public class MyClass {
private final Map<String, MyField> fields = new HashMap<>();
/* code to initially fill the map */
public MyField whichField(String fieldName) {
return fields.get(fieldName);
}
}
关于java - java中如何使用字符串与字段名进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18203249/