使用scala中的case类的通用枚举

时间:2017-08-08 20:16:53

标签: scala case-class

我创建了以下枚举对象

sealed trait MsgMapping[T] {def mycode: T;}

object Type1 {

  sealed trait msg[Int] extends MsgMapping[Int]

  case object A extends msg[Int]{val myCode = 0;}
  case object B extends msg[Int]{val myCode = 1;}

}

 object Type2 {

  sealed trait msgtype[String] extends MsgMapping[String]

  case object C extends msgtype[String]{val myCode = "xyz";}
  case object D extends msgtype[String]{val myCode = "def";}
 }

我想创建一个除了任何类型的MessageMapping之外的通用case类,它可以是Integer / String或任何数据类型

但是这一行会产生错误,因为它需要这种类型。

           case class EumType(valueType: MsgMapping [T])

以下作品

 case class EumType1(valueType: MsgMapping [Int])
 case class EumType2(valueType: MsgMapping [String])
 case class TestEnum(value:EumType1)
 case class Test(val:TestEnum)

但我不想创建EumType1和EumType2。任何人都可以帮我创建一个通用代码

更新

根据建议

 case class EnumType[T](valueType: MsgMapping[T])

 case class TestEnum(value:EnumType[T]) 

 It will throw compile error since it expects type 
 here but i want to pass the type on this line   
 case class Test(val:TestEnum) ,whether it is Type1 /Type2

1 个答案:

答案 0 :(得分:0)

尝试使用存在类型:

case class EumType(valueType: MessageMapping [_])