Scala: Pencocokan pola dengan kelas kasus umum

Apakah mungkin untuk mencocokkan kelas kasus umum? Idenya adalah untuk menggunakan beberapa kelas kasus umum sebagai pesan antar aktor.

Itulah pendekatan saya: Apakah ada cara untuk mewujudkannya?

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

Konstruksi ini memberikan kesalahan saat kompilasi:

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

Terima kasih atas bantuan Anda


person prototyp    schedule 22.06.2014    source sumber


Jawaban (1)


Mengapa Anda tidak melakukan apa yang disarankan oleh kompiler:

  case class EbTreeDataObject[+T](uId: Long, changeId: Long, payload: Option[T])
person Noah    schedule 22.06.2014
comment
Terima kasih tapi apa perbedaan antara [+T] dan [T]? - person prototyp; 23.06.2014
comment
[T] berarti hanya tipe 'T' yang diperbolehkan, sedangkan '[+T]' berarti segala sesuatu yang merupakan subtipe dari T, A <: T. Inilah pertanyaan SO yang layak yang menjelaskan hal ini secara lebih rinci: stackoverflow.com /pertanyaan/663254/ - person Noah; 23.06.2014