たとえば、単一のメソッドを持つJavaインターフェイスを備えたAndroidアプリがありますvoid doStuff(String className)
。他の人は、APKに含めるために、それぞれがこのインターフェイスを実装するクラスを含む.jarファイルを提供してくれます。がdoStuff()
呼び出されると、インターフェイスを実装するクラスの名前をパラメータとして受け取ります。doStuff()
次に、自分のコードで特定の実装クラスタイプを定義しなくても、そのクラスのインスタンスを取得して実行時に呼び出すことができるようにしたいと思います。これを達成するための最良の方法は何ですか?
2 に答える
2
あなたは穏やかな量の反射でこれを行うことができます:
Class<? Extends MyInterface> myClass = (Class<? Extends MyInterface>)Class.forName(className);
MyInterface myObject = myClass.newInstance();
myObject.doStuff();
これには、実装クラスにアクセス可能な引数なしのコンストラクターが必要です。
于 2013-02-05T02:49:12.393 に答える
1
これはリフレクションで実現できます。必要に応じて変更できる例を次に示します。
このコードは、doStuff が引数をとらず、クラスにデフォルトのコンストラクターが定義されていることを前提としています。
Class<?> myClass = Class.forName(className);
Method doStuffMethod = myClass.getMethod("doStuff");
doStuffMethod.invoke(myClass.newInstance());
于 2013-02-05T02:42:26.887 に答える