2017-10-21 5 views
1

JARでメソッドを実行すると、メソッドはpublic static SomeType getValue()のようになります。JARファイルのクラスから値を取得する

私は、リフレクションを使用しようとしましたが、それは大丈夫に見えた:

URLClassLoader classLoader = new URLClassLoader(new URL[]{jarFile.toURI().toURL()}, Main.class.getClassLoader()); 
Class targetClass = classLoader.loadClass("some.package.TargetClass"); 
Class targetType = classLoader.loadClass("some.package.SomeType"); 
Method getValueMethod = targetClass.getMethod("getValue"); 

しかし、このように戻り値を取得中:

targetType value = targetClass.cast(getValueMethod.invoke(null)); 

valueのタイプはtargetTypeすることはできません、それはないですか?しかし、タイプSomeTypeは、JARファイル内にあるので、私はその後SomeType value = ~~

のように行うことはできませんが、どのように私はきちんとgetValue()の値を取得し、そのデータにアクセスすることができますか?

+0

反射も使用します。しかし、なぜあなたはそれをやっていますか?クラスパスにjarファイルがないのはなぜですか?より高いレベルで、何を達成しようとしていますか? –

+0

'jarFile'は動的に変更できるためです。しかし、クラスパスの設定は静的な方法です。 – QueN

答えて

0

インターフェイスを使用して戻り値を制限します。

戻り値に制限がない場合は、その値を知っていることを意味します。あなたの「ダイナミックロード」の意味は何ですか?

抽象通常のインターフェースSomeInterface、その後、

SomeInterface value = targetClass.cast(getValueMethod.invoke(null)); 

他のコードは、SomeInterfaceのために働くが、それが実際に何を知っている必要はありません。それはインターフェースのパワーです。

関連する問題