2012-02-13 18 views
9

Od Scala, używam biblioteki Java, która oczekuje argumentu klasy. Przykład:scala - pobierz klasę z ciągu znaków

def service: OAuthService = new ServiceBuilder() 
            .provider(classOf[RunApi]) 

RunApi jest klasą Java.

Chciałbym jednak móc przekazywać różne klasy dostawcom. Mam ich listę w formacie String.

Przykład, jeśli znam RunApi w formacie String; na przykład "com.me.RunApi", jak skonstruować odpowiednik powyższego kodu?

Odpowiedz

14

Zastosowanie forName metoda:

scala> Class.forName("scala.collection.mutable.ArrayBuffer") 
res0: java.lang.Class[_] = class scala.collection.mutable.ArrayBuffer 
+0

Dzięki, myślałem, że to będzie działać, ale: [błąd] (org.scribe.builder.api.Api) org.scribe.builder.ServiceBuilder [Błąd ] (java.lang.Class [_ <: org.scribe.builder.api.Api]) org.scribe.builder.ServiceBuilder [błąd] nie można zastosować do (java.lang.Class [? 0 (w usłudze metody)]) [błąd] .provider (Class.forName ("com.me.RunApi")) [błąd]^ [błąd] jeden błąd został znaleziony –

+2

Wystarczy rzucić go do wymaganego typu: 'Class.forName (" com.me.R unApi "). AsInstanceOf [Klasa [_ <: org.scribe.builder.api.Api]]'. –

+0

Dzięki. Próbowałem tego równie dobrze jak Class.forName ("com.me.RunApi"). AsInstanceOf (Api), ale: java.lang.Class nie można przesyłać do org.scribe.builder.api.Api. RunApi rozszerza abstrakcyjną klasę nadrzędną, która implementuje interfejs API. –

Powiązane problemy