Упростите выражение переключателя, которое обновляет приватный член - PullRequest
0 голосов
/ 21 марта 2019

Я хочу упростить эту логику:

  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 голосов
/ 21 марта 2019

Вы можете сделать 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";
        }
    }
}
0 голосов
/ 21 марта 2019

Если ваши соглашения об именах переменных-членов приведены в коде примера, вы можете использовать рефлексию. Если это более элегантно, чем то, что у вас есть прямо сейчас, это спорно.

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) {

    }
}
...