2012-02-13 12 views
9

De Scala, estoy usando una biblioteca Java que espera un argumento de clase. Ejemplo:scala - obtener clase de una cadena

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

RunApi es clase de Java.

Sin embargo, me gustaría poder pasar una variedad de clases al proveedor. Tengo una lista de ellos en formato de cadena.

Ejemplo, si conozco el formato RunApi en Cadena; p.ej. "com.me.RunApi", ¿cómo se puede construir el equivalente al código anterior?

Respuesta

14

Uso forName método:

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

Gracias, pensé que iba a funcionar, pero: [error] (org.scribe.builder.api.Api) org.scribe.builder.ServiceBuilder [Error ] (java.lang.Class [_ <: org.scribe.builder.api.Api]) org.scribe.builder.ServiceBuilder [error] no se puede aplicar a (java.lang.Class [? 0 (en el servicio de método))]) [error] .provider (Class.forName ("com.me.RunApi")) [error]^ [error] se ha encontrado un error –

+2

Simplemente ejecútelo al tipo requerido: 'Class.forName (" com.me.R unApi "). asInstanceOf [Clase [_ <: org.scribe.builder.api.Api]]'. –

+0

Gracias. Intenté eso tan bien como Class.forName ("com.me.RunApi"). AsInstanceOf (Api), pero: java.lang.Class no se puede convertir a org.scribe.builder.api.Api. RunApi amplía una clase primaria abstracta que implementa la interfaz Api. –

Cuestiones relacionadas