Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala:使用泛型case类的模式匹配_Scala_Generics_Pattern Matching - Fatal编程技术网

Scala:使用泛型case类的模式匹配

Scala:使用泛型case类的模式匹配,scala,generics,pattern-matching,Scala,Generics,Pattern Matching,是否可以匹配泛型案例类? 其思想是使用一些通用案例类作为参与者之间的消息 这就是我的方法:有没有办法让这成为可能 case class EbTreeDataObject[T](uId: Long, changeId: Long, payload:Option[T]) case class InsertNewObject[T](newObject: EbTreeDataObject[T]) case class UpdateObject[T](changedObject: EbTreeDataOb

是否可以匹配泛型案例类? 其思想是使用一些通用案例类作为参与者之间的消息

这就是我的方法:有没有办法让这成为可能

case class EbTreeDataObject[T](uId: Long, changeId: Long, payload:Option[T])
case class InsertNewObject[T](newObject: EbTreeDataObject[T])
case class UpdateObject[T](changedObject: EbTreeDataObject[T])


class TreeActor[T](maxSynchroWait:Int,communication:CommunikationLayer[T]) extends Actor {
  var uIdTree = new EbTree[EbTreeDataObject[T]]
  var changeIdTree = new EbTree[EbTreeDataObject[T]]

  override def receive: Receive = {
    //basic tree operations
    case InsertNewObject(newObject: EbTreeDataObject[T]) =>
       //insert element in tree
    case UpdateObject(newObject: EbTreeDataObject[T]) =>
       //update object
    case RemoveObject(removedObject: EbTreeDataObject[T]) =>
       //remove object
此构造在编译时出错:

Error:(32, 37) pattern type is incompatible with expected type;
 found   : model.EbTreeDataObject[T]
 required: model.EbTreeDataObject[Any]
Note: T <: Any, but class EbTreeDataObject is invariant in type T.
You may wish to define T as +T instead. (SLS 4.5)
    case InsertNewObject(newObject: EbTreeDataObject[T]) =>
错误:(32,37)模式类型与预期类型不兼容;
已找到:model.EbTreeDataObject[T]
必需:model.EbTreeDataObject[任何]
注:T

感谢您的帮助

为什么不按照编译器的建议执行:

  case class EbTreeDataObject[+T](uId: Long, changeId: Long, payload: Option[T])

为什么不按照编译器的建议去做呢:

  case class EbTreeDataObject[+T](uId: Long, changeId: Long, payload: Option[T])

Thx但是[+T]和[T]之间的区别是什么?
[T]
只表示允许的“T”类型,其中“[+T]”表示属于
T
子类型的任何东西,
a Thx但是[+T]和[T]之间的区别是什么?
[T]
表示只允许的“T”类型,其中“[+T]”表示属于
T
子类型的任何东西,
a