最初に私がENVIRを説明します:Javaは内部でクラスとどのように連携しますか?
私は
package com.stackoverflow.test;
public interface A {};
-------------------------------------------
package com.stackoverflow.test;
public class B {
private A a;
public void setA(A a) {
this.a = a;
}
};
とのjarアーカイブを持って、私はジャーBからセットAを起動していたとき、私も(
package com.stackoverflow.test;
public interface A {};
-------------------------------------------
package com.stackoverflow.test;
public class AImpl implements A {}
-------------------------------------------
package com.stackoverflow.test;
class TestInvocation {
public static void main(String[] args) {
...
/* Instance of class B gained via external lib */
Object obj;
A a = new AImpl();
try {
Method method = obj.getClass().getMethod("setA", A.class);
method.invoke(obj, a);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
...
}
}
で現在のアプリを持っていますjar com.stackoverflow.test.Aを受け入れます)、アプリケーションiからパラメータcom.stackoverflow.test.Aをプッシュすると、NoSuchMethodExceptionが取得されます。 jar Bメソッドの定義をObjectとして受け取り、AImplをJar Aにキャストしようとすると、ClassCastExceptionが発生します。
私の質問:JarのAとアプリAの違いはありますか?はいの場合 - 私はこの場合どのようにすることができますか?
私のターゲット - DIは外部ジャーを使用しています。
それが助け場合は - 私はjarファイルからクラスをロードするために使用libには、ここでhttps://github.com/kamranzafar/JCL
B用LIBとして使用このジャーをジャーの一部です。メインアプリではアクセスできません。 – cronzzz