java - java中如何使用字符串与字段名进行比较?

标签 java

我有一个名为 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/

相关文章:

java - 中断的线程仍在继续执行

java - 如何在 JTextPane 中围绕组件包装文本?

java - 如何从 map 叠加层传递值

java - 将一个应用程序的值传递到后台的其他包应用程序,例如 facebook 和 facebook Messenger 应用程序

java - 我可以找出当前平台上的 java.library.path 映射到什么变量吗?

java - 读取输入流时出错 : Software caused connection abort' in java server

java - 在 Java 中是否可以更改或修改枚举本身,从而破坏枚举单例?

java - Java 中的字符串

java - 如何在准备好的语句中将字符连接到 SQL 字符串

java - verifyListener 和 FocusListener 之间的冲突