3

実行時にインターフェースを作成するためのソリューションを探しています。とにかくこれが可能かどうかは本当にわかりません。

問題:

Map<String,String>キーがこのサービスのアクションを定義する場所を公開するOSGiサービスがあります。このサービスを春のサービスとして直接公開したいのですHessianが、そのためにはインターフェースを削除する必要があります。次に、実行時にこのインターフェイスを作成します。

4

4 に答える 4

3

たとえば、 ASMなどのバイトコード操作ライブラリを使用してインターフェイスを生成することにより、インターフェイスを動的に作成することができます。ただし、そのインターフェイスに対してコードをコンパイルできないため、そのインターフェイスを使用することはできません(それを使用するコードも動的に生成しない限り)。

あなたがやろうとしていることは何ですか?

于 2010-10-14T09:46:26.047 に答える
2

あなたは本当にそれをすることはできません(あなたがバイトコードの操作/作成を含み、それが最良の道だとは思わない限り)。

動的に作成されたインターフェースにアクセスできるものがない場合、そのインターフェースはどのように役立ちますか?

言い換えれば、動的に作成されたインターフェイスに対してコンパイルできるものはありません(コンパイル時に存在しないためです)。では、誰がそれを使用するのでしょうか?

于 2010-10-14T09:12:17.160 に答える
0

別の質問から次の答えを選びました。この例では実際に新しいクラスを記述しているので、これが役立つかもしれません。

JDK6にはJavaコンパイラAPIがあります。ただし、必ずしも使いやすいとは限りません。

簡単なグーグルがこの使用例を引き出しました。

于 2010-10-14T09:34:51.477 に答える
0

インターフェイスとクラスは、コンパイラがバグの可能性を見つけるのを支援するためだけに存在します。実行時にこのインターフェイスを作成したい場合は、コンパイラがありません。バグは検出されません。なぜこのインターフェイスが必要なのですか?

このような状況では、次のような汎用インターフェイスの実装を公開するだけです。interface GenericInterface {Object invokeMethod(String name、Object ... arguments); 必要なインターフェースはこれだけで、コンパイル時に作成できます。実行時に作成する必要があるのは、その実装のみです。たとえば、java.lang.reflect.Proxyを使用します。

于 2010-12-09T13:15:02.000 に答える