In Scala mache ich einige Java-Interop. Ich erstelle einen Wert der Klasse Sample.Individual
und ich rufe eine statische Java-Methode wie Sample.Individual.newBuilder()
. Ich verwende ein paar Klassen, die alle dieselbe statische Methode haben (zB: Sample.Position
und Sample.Feature
). Ich möchte eine Funktion machen, die über sie parametrisiert, so etwas wie:Zugriff auf statische Methoden parametrisierter Java-Klassen von Scala
Was ist der richtige Weg ist, die Art Sample.Individual
, die mich parametrieren lässt:
def p[T](s: String): T = {
val pb = T.newBuilder() // this returns a value of type T.Builder
... do stuff with pb ...
pb.build() // this returns a value of type T
}
aber das sagt mir, „Wert T nicht gefunden“ Rufen Sie auch statische Methoden auf, die in Scala enthalten sind?
Scala * könnte * Zucker dafür haben, aber es würde Laufzeit-Reflektion benötigen, um tatsächlich zu implementieren, da es den normalen dynamischen Versand nicht verwenden konnte. – chrylis
Ich glaube nicht, dass es einen direkten Weg gibt, das zu tun. Zumindest nicht wie du gezeigt hast. Sie können jedoch ['TypeTags/ClassTags'] (http://docs.scala-lang.org/overviews/reflection/typetags-manifests.html) verwenden, um weitere Informationen über den Typ zu erhalten, der bearbeitet wird, und dann [Java Reflections API] zu verwenden ] (https://docs.oracle.com/javase/tutorial/reflect/) um [die statische Methode aufzurufen] (http://stackoverflow.com/questions/2467544/invoking-a-static-method-using-reflection)). – marcospereira