Scala/Java枚举

Pau*_*per 4 java enums scala idiomatic

我已经读过这个这个,但我仍然不理解在Scala中这样做的(惯用的)等效方法

enum Status { 
    OK(1, "Ok", "Okay"),
    NOT_OK(5, "Not Ok", "Not Okay")
    BAD(10, "Bad", "Run for your life")

    int code;
    String name;
    String description; // custom fields

    Status(int code, String name, String description) {
        this.code = code;
        this.name = name;
        this.description = description;
    }
}

class Main {
    public static void main(String[] args) {
        for(Status status : Status.values) { // iterate through them
            doStuff(status);
        }
    }

    private doStuff(Status status) {
        System.out.println(status.description);
        // and more
    }
}
Run Code Online (Sandbox Code Playgroud)

cyr*_*llk 10

在Scala中,您可以创建一个与Java"enum"接近的Enumeration结构.基本上,您需要做的只是扩展一个scala.Enumeration类,并在需要更复杂的类作为枚举时扩展Val类.否则,您可以使用默认的Val类,它接受Int或String或Both.下面是Java代码的Scala版本.

object Status extends Enumeration {

  case class StatusVal(code: Int, name: String, description: String) extends Val

  val OK = StatusVal(1, "Ok", "Okay")
  val NOT_OK = StatusVal(1, "Not Ok", "Not Okay")
  val BAD = StatusVal(1, "Bad", "Run for your life")
}

object Application extends App {
  Status.values foreach (s => println(s.asInstanceOf[StatusVal].description))
}
Run Code Online (Sandbox Code Playgroud)