scala generische Funktion Rückgabetyp

Ich habe versucht, eine Funktion mit einem generischen Rückgabetyp zu schreiben, aber sie funktioniert nur, wenn ich den Rückgabetyp umgewandelt habe. Bitte beachten Sie die FunktiongetSomething() unten erwartete ich, dass es ohne das Casting funktionieren würde. Was könnte ich hier falsch machen?

trait Sup

class Sub extends Sup {
  def getString = "I am Sub"
}

class Sub2 extends Sup {
  def getInt = 100
}

def getSomething[A <: Sup](str: String) : A  = {
  str match {
    case "sub" => getSub.asInstanceOf[A]
    case "sub2" => getSub2.asInstanceOf[A]
  }
}

def getSub(): Sub = {
  new Sub
}

def getSub2() : Sub2 = {
  new Sub2
}

val x = getSomething[Sub]("sub").getString
val y = getSomething[Sub2]("sub2").getInt

Antworten auf die Frage(4)

Ihre Antwort auf die Frage