【问题标题】:How can I declare enums using java如何使用 java 声明枚举
【发布时间】:2011-10-23 20:13:27
【问题描述】:

我想将此示例 C# 代码转换为 java 代码:

public enum myEnum {
  ONE = "one",
  TWO = "two",
}; 

因为我想把这个常量类改成枚举

public final class TestConstants {
    public static String ONE = "one";
    public static String TWO= "two";
}

【问题讨论】:

  • 至于枚举,下面还有很多其他的正确答案(以及上面的必读链接)。只是想补充一点,如果您的类包含一些像您的示例中那样的常量(我现在不是在谈论枚举!!!)您可以简单地以这种方式定义接口: public interface TestConstants { String TEST = "test"; /*...*/ } 接口“字段”是隐式公共静态的。
  • @Arturs Licis:使用接口来保存常量是一种反模式。接口旨在定义行为。使用带有私有构造函数的常规类来保存常量。静态导入可用于访问常量,而无需将类名放在前面。
  • @JB Nizet:完全同意,这就是为什么我说'我现在不是在谈论枚举!!!'我只是展示了一种更准确的方式来声明“常量持有者”(接口与类)。
  • @Arturs Licis:我的观点是,您不应该使用接口来保存常量,而应该使用类:公共类 TestConstants 而不是公共接口 TestConstants。如果您完全同意我的观点,为什么要向 OP 提出这个建议?

标签: java enums


【解决方案1】:
public enum MyEnum {
   ONE(1),
   TWO(2);
   private int value;
   private MyEnum(int value) {
      this.value = value;
   }
   public int getValue() {
      return value;
   }
}

简而言之 - 只要您提供构造函数参数(并将值设置到相应字段),您就可以为枚举定义任意数量的参数

正如 Scott 所说 - official enum documentation 为您提供答案。始终从语言特性和结构的官方文档开始。

更新:对于字符串,唯一的区别是你的构造函数参数是String,而你用TEST("test")声明枚举

【讨论】:

  • value 的吸气剂怎么样?
  • @Bohemian - 我什至在你发表评论之前就添加了它:)
【解决方案2】:

enums 在 Java 中是 classes。它们有一个隐含的序数值,从 0 开始。如果你想存储一个额外的字段,那么你可以像对待任何其他类一样:

public enum MyEnum {

    ONE(1),
    TWO(2);

    private final int value;

    private MyEnum(int value) {
        this.value = value;
    }

    public int getValue() {
        return this.value;
    }
}

【讨论】:

    【解决方案3】:

    很简单如下:

    /**
     * @author The Elite Gentleman
     *
     */
    public enum MyEnum {
        ONE("one"), TWO("two")
        ;
        private final String value;
    
        private MyEnum(final String value) {
            this.value = value;
        }
    
        public String getValue() {
            return value;
        }
    
        @Override
        public String toString() {
            // TODO Auto-generated method stub
            return getValue();
        }
    }
    

    有关更多信息,请访问 Oracle Java 教程中的 Enum Types。另外,请记住枚举具有 private 构造函数。


    更新,由于您更新了您的帖子,我已将我的值从 int 更改为 String
    相关: Java String enum.

    【讨论】:

    • 将 value 声明为 final 有什么好处?
    • enum 是 Java 中的常量,因此将 value 放置为 final 只是“重申”enum 的常量性。
    【解决方案4】:

    嗯,在java中,你也可以创建一个参数化的枚举。假设您要创建一个 className 枚举,您需要在其中存储 classCode 以及 className,您可以这样做:

    public enum ClassEnum {
    
        ONE(1, "One"), 
        TWO(2, "Two"),
        THREE(3, "Three"),
        FOUR(4, "Four"),
        FIVE(5, "Five")
        ;
    
        private int code;
        private String name;
    
        private ClassEnum(int code, String name) {
            this.code = code;
            this.name = name;
        }
    
        public int getCode() {
            return code;
        }
    
        public String getName() {
            return name;
        }
    }
    

    【讨论】:

      【解决方案5】:
      public enum MyEnum
      {
          ONE(1),
          TWO(2);
      
          private int value;
      
          private MyEnum(int val){
              value = val;
          }
      
          public int getValue(){
              return value;
          }
      }
      

      【讨论】:

      • 为什么是下划线?典型的约定是拥有字段,然后是构造函数,然后是 getter。
      【解决方案6】:
      public enum NewEnum {
         ONE("test"),
         TWO("test");
      
         private String s;
      
         private NewEnum(String s) {
            this.s = s);
         }
      
          public String getS() {
              return this.s;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-22
        • 2010-10-01
        • 2014-07-30
        相关资源
        最近更新 更多