2012-02-13 17 views
9

Scala'dan, sınıf argümanını bekleyen bir Java kütüphanesi kullanıyorum. Örnek:scala - Bir dizeden ders alın

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

RunApi Java sınıftır.

Sağlayıcıya çeşitli sınıflar geçebilmeyi isterim. Dize formatında onların bir listesi var.

Örnek, String biçimindeki RunApi'yi biliyorsanız; Örneğin. "com.me.RunApi", yukarıdaki kodla eşdeğerini nasıl oluşturabilirim?

cevap

14

Kullanım forName yöntemi: [Hata] (org.scribe.builder.api.Api) org.scribe.builder.ServiceBuilder [hatası:

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

sayesinde, işe gidiyor, ama düşündüm ] (java.lang.Class [_ <: org.scribe.builder.api.Api]) org.scribe.builder.ServiceBuilder [hata] uygulanamaz (java.lang.Class [? 0 (yöntem hizmetinde))]) [hata] .provider (Class.forName ("com.me.RunApi")) [hata]^ [hata] bir hata bulundu –

+2

Sadece gerekli türe dökün: 'Class.forName (" com.me.R unApi ") asInstanceOf [Sınıf [_ <: org.scribe.builder.api.Api]]'. –

+0

Teşekkürler. Bunun yanı sıra Class.forName ("com.me.RunApi"), asInstanceOf (Api) denedim, ancak: java.lang.Class org.scribe.builder.api.Api'ye dönüştürülemez. RunApi, Api arabirimini uygulayan soyut bir ana sınıfı genişletir. –

İlgili konular