2017-02-20 5 views
1

私は次のインポートを削除したい:私はハードにそれを行うとclassOfの入力タイプをscalaで修正するために文字列を調整するにはどうすればよいですか?

my.package.version1.class1 
my.package.version2.class1 
my.package.version3.class1 

import my.package.version.class1 

理由は、私は、パラメータとしてversionを渡したいように、私は、次のオプションを持つことができています - それが動作するようにコード化されました

classOf[my.package.version1.class1].getPackage 

しかし、私はバージョンごとにバージョンを追加できるように、それはString型である必要があります。

val hh = "my.package."+versionParamater+".class1" 



classOf[hh].getPackage //THIS WONT WORK error: identifier expected but string literal found. 

また、私はこれをやってみました、それは同様に動作didntは:

val pkg = Package.getPackage(" my.package.version1.class1"); 

あなたが支援してくださいすることができますか?

答えて

1

あなたはjava.lang.Class.forName(fullClassPackage)を使用することができます。

例、

val versionParamater = "version1" 
    val fullPackage = "my.package."+versionParamater+".class1" 
    val versionedClass = Class.forName(fullPackage) 
    assert(versionedClass.getSimpleName == "class1") 
    assert(versionedClass.getPackage.getName == "my.package.version1") 
3

クラスを取得するには、java.lang.Class.forNameメソッドに戻す必要があります。しかしClass<class1>ではなくClass<?>が返されることに注意してください。たとえば:

scala> Class.forName("java.lang.String") 
res0: Class[_] = class java.lang.String 

あなたはしかし、それをキャストすることができます

scala> res0.asInstanceOf[Class[String]] 
res1: Class[String] = class java.lang.String 

A ClassCastExceptionでミスキャストがしますない結果:

scala> res0.asInstanceOf[Class[Integer]] 
res2: Class[Integer] = class java.lang.String 
関連する問題