Wie diese Zusammenstellung Fehler beheben:Wie loswerden: Klassentyp erforderlich, aber T gefunden
trait Container {
def getInts() : Seq[Int]
def getStrings() : Seq[String]
def put[T](t: T)
def get[T] : Seq[T]
}
class MutableContainer extends Container {
val entities = new mutable.HashMap[Class[_], mutable.Set[Any]]() with mutable.MultiMap[Class[_], Any]
override def getStrings(): Seq[String] = entities.get(classOf[String]).map(_.toSeq).getOrElse(Seq.empty).asInstanceOf[Seq[String]] //strings
override def getInts(): Seq[Int] = entities.get(classOf[Int]).map(_.toSeq).getOrElse(Seq.empty).asInstanceOf[Seq[Int]]
override def get[T]: Seq[T] = entities.get(classOf[T]).map(_.toSeq).getOrElse(Seq.empty).asInstanceOf[Seq[T]]
override def put[T](t: T): Unit = entities.addBinding(t.getClass, t)
}
Hier ist der Fehler:
[error] Container.scala:23: class type required but T found
[error] override def get[T]: Seq[T] = entities.get(classOf[T]).map(_.toSeq).getOrElse(Seq.empty).asInstanceOf[Seq[T]]
keine andere Möglichkeit, die Compiler ein Typparameter ist notwendigerweise ein Klassentyp zu sagen, ? [Ich probierte sogar einen Typparameter T <: SomeClass in meinem Fall] (http://stackoverflow.com/questions/32797731/passing-a-type-parameter-for-instantiation), und der Typ gebunden überzeugte nicht Compiler das ist ein Typ :( – matanster