【问题标题】:an integer and string in an enum class枚举类中的整数和字符串
【发布时间】:2016-04-27 05:31:26
【问题描述】:

我有一个关于如何在枚举类中放置整数值和字符串的问题。我正在使用要存储在数据库中的枚举值。我想要的是这样的

public enum MyList {
    1,
    2,
    3,
    APPLE,
    BANANA
}

但我的值“1”有错误,它说

Syntax error on token "1", Identifier expected

我在这里搜索了答案,但我发现他们试图根据用户输入的整数来获取枚举的值。我需要的是直接将值123APPLEBANANA 存储在数据库中。

甚至可以在枚举中组合整数和字符串吗?任何帮助或建议都会有很大帮助。非常感谢!

PS。我对编程很陌生,所以我很难用正确的术语来解释这个问题。请用简单的术语回复!谢谢!

编辑:

如果1 是该类中唯一的整数,则错误就像我上面所说的那样。但是在我添加23 之后,它在public enum MyList { 中有一条红线并说

Syntax error on token(s), misplaced construct(s)

【问题讨论】:

  • 使用一、二和三。我希望这篇文章可以帮助你stackoverflow.com/questions/3990319/…
  • 您尝试做的事情是不可能的。枚举是对象,而不是整数或字符串。像任何对象一样,它们可以选择wrap 其他值。但您需要更具体地了解获得有用示例所需的内容。
  • @Kajal 我会检查的!谢谢!
  • @shmosel 注意到了!谢谢!

标签: java enums


【解决方案1】:

Oracle's documentation中所述,

枚举类型是一种特殊的数据类型,它使变量能够 一组预定义的常量。

常量的名称必须满足与任何变量相同的rules,因此它不能是整数。

样式约定是将常量写成大写,单词之间用下划线分隔。

【讨论】:

    【解决方案2】:

    您可以创建一个自定义枚举类型,如下所示,

    public enum MyList{
    
        ONE(1), TWO(2), THREE(3), APPLE("apple"), BANANA("banana");
    
        Object myItem;
    
        private MyList(Object myItem) {
            this.myItem= myItem;
        }
    
     public static MyList customValueOf(Object value) {
            for(MyList v : values())
                if(v.myItem.equalsIgnoreCase(value)) return v;
            throw new IllegalArgumentException();
        }
    
    }
    

    【讨论】:

      【解决方案3】:

      枚举是特殊的数据类型,它只包含大写的常量值,例如public enum myList{ APPLE, BANANA }

      所以所有这些常量都是变量名,不能以数字开头(如 1APPLE 作为变量名,变量可以以字母或下划线开头)。记住如何在 java 中命名变量。

      【讨论】:

        【解决方案4】:

        您可以为需要它的单个枚举值覆盖 toString(),如下所示:

        public enum MyList {
            E1 { @Override public String toString() { return "1"; } },
            E2 { @Override public String toString() { return "2"; } },
            E3 { @Override public String toString() { return "3"; } },
            APPLE,
            BANANA
        }
        

        缺点是您总是必须使用myEnumVal.toString() 来获取枚举的字符串表示,而不是myEnumVal.name()。如果你需要 String 到 MyList 的转换,你可以像这样添加一个静态函数:

        public static MyList fromValue(String v) {
            for (MyList e: MyList.values()) {
                if (e.toString().equals(v)) {
                    return e;
                }
            }
            throw new IllegalArgumentException(v);
        }
        

        【讨论】:

          【解决方案5】:

          枚举是一种类,其实例数量有限,以大写字母命名。把数字写出来:

          public enum MyList {
              ONE,
              TWO,
              THREE,
              APPLE,
              BANANA
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-17
            • 2014-07-23
            • 2011-06-10
            • 1970-01-01
            相关资源
            最近更新 更多