簡體   English   中英

Scala:與通用案例類進行模式匹配

[英]Scala: Pattern matching with generic case classes

是否可以匹配通用案例類? 想法是使用一些通用案例類作為參與者之間的消息。

多數民眾贊成在我的做法:是否總有可能做到這一點?

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]) =>

謝謝你的幫助

您為什么不執行編譯器建議的操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM