【问题标题】:How do I replicate this C++ enum switch in Java?如何在 Java 中复制这个 C++ 枚举开关?
【发布时间】:2010-12-09 11:29:57
【问题描述】:

我有一些看起来像这样的 C++ 代码:

enum {
     FOO = 0x01,
     BAR = 0x09;
};

switch (baz) {
     case FOO:
     {
          //...
     }
     break;
     case BAR:
     {
          //...
     }
     break;
}

是否可以在 Java 中复制这种行为?

【问题讨论】:

    标签: java c++ enums switch-statement


    【解决方案1】:

    是的,Java 有枚举:

    public enum BazEnum {
        FOO(0x01),
        BAR(0x09);
    
        private int value;
    
        BazEnum(int value) {
            this.value = value;
        }
    
        public int getValue() {
            return value;
        }
    
        public static BazEnum fromValue(int value) {
            for (BazEnum curenum : BazEnum.values()) {
                if (curenum.getValue() == value) {
                    return curenum;
                }
            }
            return null;
        }
    }
    
    public class MainClass {
        public static void main(String[] params) {
            BazEnum baz = BazEnum.fromValue(0x09);
    
            switch baz {
                case FOO:
                    ...
                    break;
                case BAR:
                    ...
                    break;
                default:
                    ...
                    break;
            }
        }
    }
    

    【讨论】:

    • BazEnum baz = BazEnum.fromValue(0x09); switch (baz) 正是我所需要的——谢谢!
    • @etheros:以防万一您没有注意到 - 它是 BazEnum 本身中定义的自定义方法。默认情况下,枚举在 java 中没有属性。
    • 您的return null; 必须在for 循环之外!
    • @Felix Dombek:感谢您的关注,已修复。
    【解决方案2】:

    查看Java Tutorial on Enum Types,其中包含有关构造枚举并在 switch 语句中使用它们的示例。

    【讨论】:

      【解决方案3】:

      当然,给枚举起个名字:

      enum Baz
      {
          FOO, BAR;
      }
      

      然后你可以切换Baz类型的表达式:

          switch (baz)
          {
          case FOO:
              {
      
              }
              break;
      
          case BAR:
              {
      
              }
              break;
          }
      

      如果您愿意,您仍然可以将 FOOBAR 与值 1 和 9 关联:

      enum Baz
      {
          FOO(0x01), BAR(0x09);
      
          Baz(int value)
          {
              this.value = value;
          }
      
          public final int value;
      }
      

      然后你可以说baz.value 来获取关联的值。

      【讨论】:

        【解决方案4】:
        public enum Enum{
             FOO(0x01),
             BAR(0x09);
        
             Enum(int value){
                 this.value=value;
             }
             private int value;
        };
        
        public void test() {
            Enum testEnum = null;
            switch(testEnum){
                case FOO:{}break;
                case BAR:{}break;
            }
        }
        

        【讨论】:

          【解决方案5】:

          虽然 Java 有枚举,但它们是对象而不是原语。只使用常量可能更简单

          static final int 
              FOO = 0x01,
              BAR = 0x09;
          
          switch (baz) {
               case FOO:
                    //...
                    break;
               case BAR:
                    //...
                    break;
          }
          

          【讨论】:

            【解决方案6】:

            只需创建一个枚举 xDD

            public enum EnumName
            {
              Foo(),Bar();
            } 
            
            switch (baz)
            {
               case : EnumName.Foo
                code
                break;
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-03-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多