2012-02-13 9 views
9

Scalaから、私はクラスの引数を必要とするJavaライブラリを使用しています。例:scala - 文字列からクラスを取得する

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

RunApiはJavaクラスです。

私はプロバイダにさまざまなクラスを渡すことができるようにしたいと思います。私はそれらのリストをString形式で持っています。

私が文字列形式のRunApiを知っている場合、例。例えば"com.me.RunApi"、どのように上記のコードに相当するを構築することができますか?

答えて

14

使用forName方法:

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

おかげで、それが仕事に行くと思ったが、:[エラー](org.scribe.builder.api.Api)org.scribe.builder.ServiceBuilder [エラー](java.lang.Class [?<:org.scribe.builder.api.Api])org.scribe.builder.ServiceBuilder [エラー]は(java.lang.Class [?0(メソッドサービス) [エラー] 1つのエラーが見つかりました –

+2

「Class.forName( "com.me.RunApi" com.me.R unApi ")。asInstanceOf [クラス[_ <:org.scribe.builder.api.Api]]'。 –

+0

ありがとうございます。私はClass.forName( "com.me.RunApi")。asInstanceOf(Api)と同様に試しましたが、java.lang.Classはorg.scribe.builder.api.Apiにキャストできません。 RunApiは、Apiインタフェースを実装する抽象親クラスを拡張します。 –

関連する問題