简化更新私有成员的开关表达式

时间:2019-03-21 09:38:57

标签: java switch-statement mapping

我想简化此逻辑:

  private String member_A;
  private String member_B;
  private String member_C;
  private String member_D;

 private void xyz(Object x, String s) {
 switch (s) {
    case "A":
      member_A = x.getInternalNumber();
      break;
    case "B":
      member_B = x.getInternalNumber();
      break;
    case "C":
      member_C = x.getInternalNumber();
      break;
    case "D":
      member_D = x.getInternalNumber();
      break;
    default:
    }
 }


 xyz(x, "A");
 ...
 xyz(x, "B");
 ...
 etc

switch应该替换为更优雅的解决方案。从技术上讲,xyz(...)的调用应使用某些值更新正确的字段。 有谁有想法改善这一点?

2 个答案:

答案 0 :(得分:0)

如果成员变量的命名约定如示例代码中所述,则可以使用反射。如果它比您现在拥有的更为优雅,那就值得商

private void xyz(Object x, String s) {
    try {
        Field member = YourClass.class.getDeclaredField("member_"+s); //replace YourClass with your class name
        member.setAccessible(true);
        member.set(this, x.getInternalNumber());
    } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException | SecurityException ex) {

    }
}

答案 1 :(得分:0)

您可以成为class成员。也许是这样的:

class Member {

    String string;
    char member;

    Member (char member) {
        this.string = null;
        this.member = member;
    }
}

然后创建一个array个成员,然后在foreach循环中测试每个成员,如下所示:

private void test(char s) {
    for (Member m : members) {
        if (m.member == s) {
            m.string = "Whatever you want that member string to be equal to";
        }
    }
}