代码之家  ›  专栏  ›  技术社区  ›  Nerdy Bunz

在Java中使用常量:如何记录给定给它们的名称?

  •  1
  • Nerdy Bunz  · 技术社区  · 6 年前

    假设我们有一个类是这样的:

    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;
                }
            }
        }
    
    }
    

    我在记录操作的实际名称而不是原始名称时遇到问题。。。如果不做一大堆低效的代码——例如,在每个case块中分别记录原始字符串,那么使用Hashmap重构名称将变得很麻烦。

    我的问题是:可以使用什么样的数据结构来:

    1) 允许“UserActions”在UserAction类中被分组,这样子组就可以被迭代(例如,这排除了Enum)。

    2) 将在日志中显示操作的实际名称(.toString(),例如),而不是只显示实际的int值(number)(似乎排除了。。。这就是我正在使用的)。

    3) 可以像示例中那样静态使用,而不必构造UserAction的实例。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Evgeni Enchev    6 年前

    我会这么说 枚举 是你需要的。像这样:

    enum USER_ACTIONS { ACTION_USER_WANTS_TO_DO_A, ACTION_USER_WANTS_TO_DO_B };

    1) 他们被分为两组 枚举

    2) 在日志里你会看到 处理:操作用户希望执行

    3) 是的