Допустим, у нас есть один класс, который выглядит следующим образом:
public class UserAction {
static final int ACTION_USER_WANTS_TO_DO_A = 1001;
static final int ACTION_USER_WANTS_TO_DO_B = 1002;
// ...
// 'sub-grouping'
static final int[] ALL_ACTIONS_ALLOWED_IN_STATE_X = {
ACTION_USER_WANTS_TO_DO_A,
ACTION_USER_WANTS_TO_DO_D,
ACTION_USER_WANTS_TO_DO_Q,
// ...
}
}
... и еще один класс, который выглядит так:
public class Model {
public void onActionableEvent(int action) {
// check for state mismatch by iterating over sub-groups
// if (fail) {return;}, if pass:
Log.i("XXX","processing: " + action); // <----- this is the problem.
switch (action) {
case: .ACTION_USER_WANTS_TO_DO_A: {
//
break;
}
case: .ACTION_USER_WANTS_TO_DO_B: {
//
break;
}
}
}
}
У меня проблемы с записью действительного имени действий вместо необработанного int ... без выполнения целой связки неэффективного кода - например. ведение необработанных строк в каждом блоке отдельно, используя Hashmap, где рефакторинг имен станет громоздким.
Мой вопрос: какую структуру данных можно использовать, чтобы:
1) Разрешить подгруппы UserActions оставаться такими, как они есть в классе UserAction, таким образом, что подгруппа может быть повторена. (Это исключает Enum, например).
2) Будет ли отображаться фактическое имя действия в журнале (например, .toString ()) вместо того, чтобы просто показывать фактическое значение int (число)? (кажется, исключаю int ... именно это я и использую).
3) Может использоваться статически, как в примере, без необходимости создания экземпляра UserAction.