在Java中,我有类似的东西
public enum FlatFileHeaderMapping {
HEADER_EL(1),
HEADER_RESERVED1(5),
HEADER_RESERVED2(2),
HEADER_MESSAGE_TYPE(4)
public final int fieldSize;
private FlatFileHeaderMapping(int fieldSize) {
this.fieldSize = fieldSize;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我可以使用它将每一行放入地图,然后通过此枚举访问地图中的键(如符号)
就我所见,枚举没有这种质量,并且case类没有像枚举声明那样排序 - 因此不能用于匹配记录布局,如上所示.至少在没有有序集合的支持下.
我可能会遗漏一些明显的东西,因此这个问题!
谢谢
射线
小智 13
过度思考是正确的,但是有一种不那么冗长的方式来声明案例对象:
sealed abstract class FlatFileHeaderMapping(val fieldSize: Int)
case object HEADER_EL extends FlatFileHeaderMapping(1)
case object HEADER_RESERVED1 extends FlatFileHeaderMapping(5)
case object HEADER_RESERVED2 extends FlatFileHeaderMapping(2)
case object HEADER_MESSAGE_TYPE extends FlatFileHeaderMapping(4)
Run Code Online (Sandbox Code Playgroud)
您可以尝试使用case object
s:
sealed trait FlatFileHeaderMapping { val fieldSize: Int }
case object HEADER_EL extends FlatFileHeaderMapping { val fieldSize = 1 }
case object HEADER_RESERVED1 extends FlatFileHeaderMapping { val fieldSize = 5 }
case object HEADER_RESERVED2 extends FlatFileHeaderMapping { val fieldSize = 2 }
case object HEADER_MESSAGE_TYPE extends FlatFileHeaderMapping { val fieldSize = 4 }
Run Code Online (Sandbox Code Playgroud)
然后,您可以像这样使用枚举:
object Test {
def foo(x: FlatFileHeaderMapping) {
val result =
x match {
case HEADER_EL => "it's a HEADER_EL!"
case other => "its field size is: " + other.fieldSize
}
println(result)
}
def main(args: Array[String]) {
foo(HEADER_EL)
foo(HEADER_MESSAGE_TYPE)
}
}
Run Code Online (Sandbox Code Playgroud)
你在这里得到的主要好处是编译时检查所有枚举值是否被处理。即在x match { ... }
上面的代码中,如果你没有'case other => ...` 子句,你会得到一个编译错误。
我几乎只是重申这个答案,其中列出了这种方法的优缺点。
object Direction extends Enumeration {
val North = Value("North")
val East = Value("East")
val South = Value("South")
val West = Value("West")
}
scala> import Direction._
scala> values foreach println
scala> val map = HashMap(North -> 1, South -> 2)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8441 次 |
最近记录: |