java—如何创建一个没有示例变量的枚举类?

bxpogfeg  于 2021-07-06  发布在  Java
关注(0)|答案(4)|浏览(325)

我有一个带有枚举列表的类,枚举被传递给构造函数并更新为tostring,但是我不允许在类上有示例变量(需求的一部分)。如何使枚举像字符串一样输出而不添加示例?

public enum Other {

    GAME_BOY("Game Boy"), MACBOOK("Macbook Pro"), IPHONE("iPhone XS"), LAPTOP("Laptop");

    private final String product; //can't have instance variable

    private Other(String passed) {
        this.product = passed;
    }

    @Override
    public String toString() {
        return product;
    }
}
wgeznvg7

wgeznvg71#

您可以覆盖 toString() 对于每个元素:

public enum Other {
   GAME_BOY {
     @Override public String toString() { return "Game Boy"; }
   },
   MACBOOK { ... },
   ...
}

请在ideone.com上查看此代码的实时运行。

fsi0uk1n

fsi0uk1n2#

增强型交换机

williamson接受的答案提供了可以在Java14和更高版本中改进的代码。增强的switch语句可以防止在switch案例列表中丢失任何enum对象的问题。参见:jep 361:开关表达式。
新的语法也简洁易懂。
使用新方法如下所示:

package work.basil.example;

public enum Device
{
    GAME_BOY, MACBOOK, IPHONE, LAPTOP;

    @Override
    public String toString ( )
    {
        return switch ( this )
                {
                    case GAME_BOY -> "Game boy";
                    case MACBOOK -> "Macbook Pro";
                    case IPHONE -> "iPhone XS";
                    case LAPTOP -> "Laptop";
                };
    }
}

现在返回并添加新类型的设备,例如 WATCH .

GAME_BOY, MACBOOK, IPHONE, LAPTOP, WATCH;

编译器将标记您的 switch 声明不正确。您将看到如下消息:
switch表达式没有覆盖所有可能的输入值
将附加案例添加到 switch ,从而满足编译器的要求。然后好好睡一觉,知道一个讨厌的虫子被避免了。

case WATCH -> "Watch";

用法示例:

// Example usage.
    public static void main ( String[] args )
    {
        for ( Device device : Device.values() )
        {
            System.out.println( "device = " + device );
        }
    }
t98cgbkg

t98cgbkg3#

或者,可以在tostring方法中放入switch语句:

@Override
public String toString() {
    switch (this) {
        case GAME_BOY:
            return "Game boy";
        case MACBOOK:
            return "Macbook Pro";
        ...
    }
}
yjghlzjz

yjghlzjz4#

那这个怎么样following:-

public enum Other {

    GAME_BOY, MACBOOK, IPHONE, LAPTOP;

  @Override
  public String toString() {

    switch(this) {
      case GAME_BOY:
        return "Game Boy";

      case MACBOOK:
        return "Macbook Pro";

      case IPHONE:
        return "iPhone XS";

      case LAPTOP:
        return "Laptop";

      default:
        return null;
      }
   }

  public static void main(String[] args) {

    System.out.println("The value of the other is " + Other.GAME_BOY.toString());
  }
}

相关问题