Ich versuche, eine Scala Merkmal zu implementieren, die die Details einer Schnittstelle mit einem Java-Bibliothek, die unsWie kann ich die Laufzeit der Klasse eines parametrisierte Typ in einer Scala Zug bekommen
erstellen erfordert Griffe Was ich will sie ist so etwas wie:
trait SomeTrait[A] extends JavaAPI {
def foo = {
callApi(classOf[A])
}
override def bar = {
foo
}
}
Beachten sie, dass Bar tatsächlich eine Methode aus einer Basisklasse überschreibt, so kann ich es Unterschrift nicht ändern.
Ich habe verschiedene Varianten mit Manifesten usw. ausprobiert, aber das kann nicht ganz funktionieren. Gibt es eine Möglichkeit, die Laufzeitklasse eines parametrisierten Typs zu erhalten?
Dies ist in der Nähe, aber ich muss foo() aus dem Merkmal heraus aufrufen. Wenn ich das mit diesem Ansatz versuche, bekomme ich einen Compilerfehler: "konnte keinen impliziten Wert für Parameter ev finden: Manifest [A]. Ich habe mein Beispiel aktualisiert, um die (genauere) Spezifikation wiederzugeben. –
' ev.erasure' ist veraltet, Sie sollten jetzt ev.runtimeClass verwenden. – wizulus