私は自分のワークスペースに3つのプロジェクトを持っています.A、B、CはAndroidのlibプロジェクトです。取得したClassオブジェクトを(リフレクトを介して)インターフェイスにキャストすることは可能ですか?
- Aは
Atest
- Bという名前のアクティビティが含まれ、インターフェイス
I
を実装Btest
という名前のクラスを含んでいます。 - Cには、
I
インターフェイスが含まれています。
AndroidデバイスにAとBの両方がインストールされています。 Atest
実行時に は、私は次のコードを実行している:今ここに
Context otherContext = createPackageContext("com.package.b",
CONTEXT_INCLUDE_CODE | CONTEXT_IGNORE_SECURITY);
ClassLoader loader = otherContext.getClassLoader();
Class<?> btest = Class.forName("com.package.b.BTest", true, loader);
を、私の質問です - A
実行コンテキスト内I
にBTESTをキャストする方法はありますか?
私は多くの明白な(そしていくつかのそれほど明白ではない)トリックを試みましたが、何も私のために働いていませんでした。 AとBの両方が、LIB-プロジェクトCに
を正確に同じI
インタフェースを参照するが、私はのコースなど、そのメソッドを呼び出し、BTESTのメソッドとのインターフェースを探索することができます..しかし、私は単にI
にそれをキャストすることはできません前もって感謝します!
P.S.
私はオブジェクトにではなくインターフェイスにキャストしようとしていることに注意してください。この場合、別のClassLoader
はこの理由ではありません。
シンプルでとてもクリアです。 "invoke"を介してオブジェクトメソッドにアクセスするエスケープはありますか?私は反射を介してそのオブジェクトにアクセスする必要があります... – avimak