Wie kann ich eine Methode auf einem Scala-Objekt über Java reflektiv aufrufen?

8

Ich habe ein Scala-Objekt wie folgt definiert:

%Vor%

Ich weiß, dass ich Foo$.MODULE$.bar() von Java aufrufen kann, wenn Foo im Klassenpfad build und runtime ist, aber in meiner Situation Foo ist nicht im Klassenpfad und kann im Laufzeitklassenpfad konfiguriert sein oder nicht .

Aus meinem Java-Code möchte ich Reflection verwenden, um bar() aufzurufen, wenn sie im Klassenpfad der Laufzeit verfügbar ist, ansonsten werde ich auf eine Standardimplementierung zurückgreifen.

Ist das möglich?

    
David Carlson 30.06.2011, 02:26
quelle

3 Antworten

5

Sie können dies mit Code tun, der ungefähr so ​​aussieht:

%Vor%     
David Carlson 30.06.2011, 02:27
quelle
2

Die Klasse des Objekts Foo ist com.example.Foo$ . Wenn Sie also nur diese Klasse laden können, wird alles ohne Reflektion funktionieren:

%Vor%     
paradigmatic 30.06.2011 10:48
quelle
1

Inspiriert von David Carlsons answer Ich habe diese Utility-Klasse erstellt, um Methoden auf Scala-Objekten referenziell aufzurufen. Mit der Klasse können Sie auch Scala-Methoden aufrufen, die Parameter erwarten.

Ich lege es hier in der Hoffnung dar, dass es für jemanden nützlich ist und Feedback darüber, wie man den Code verbessern kann.

ScalaUtil.java:

%Vor%

Um die Scala-Methode mit Parametern aufzurufen, müssen Sie die Scala-Bibliothek dem Build-Pfad Ihres Java-Projekts hinzufügen.

Angenommen, dies ist das Scala-Objekt, das Sie aufrufen möchten:

%Vor%

So verwenden Sie die ScalaUtil auf dem obigen Scala-Objekt:

%Vor%     
Matthias Braun 10.11.2014 02:04
quelle

Tags und Links