-1

これは単なる楽しみのための学習実験です。私はbytecode操作をいじっています。

asminで学習するためにいじっているだけですjava。メソッドの戻り値の型をインターフェイスから置き換えることは可能でしょうか。

私が持っているとしましょうinterface

interface Modifiable {
    Integer a();
}

クラスのコピーを作成して にロードし、class loaderこの新しいインターフェイスを変更する必要がありますか?

可能であれば、この変更はコンパイル時に利用可能になりますか? いわば、ideこれらの新しいメソッドをオートコンプリートすることです。

4

6 に答える 6

5

インターフェイス自体を変更せずに戻り値の型を変更することはできません。

于 2013-10-31T15:56:50.840 に答える
1

コンパイル時に、メソッドの戻り値の型を変更することは絶対にできません。そして実行時には、はい可能です。しかし、それはまったく良い考えではありません。asmのガイドラインの下に、役立つかもしれません

ClassVisitor を使用して元のメソッド/フィールドにアクセスするときに、代わりのメソッド/フィールドを返すか、最初に ClassVisitor の元のメソッド/フィールドを削除する必要があります (「1. メソッド/フィールドを削除するにはどうすればよいですか?」を参照)。次に、ClassWriter で visit メソッドを呼び出して、新しいメソッド/フィールドを追加します。

于 2013-10-31T16:11:44.780 に答える
1

戻り値の型を Boolean に変更したい。これは可能ですか?

テキストを からIntegerに変更できますBoolean

これは実行時に行うことができますが、すべての実装が変更されない限り、インターフェイスが使用できなくなります。

クラスのコピーを作成し、それをクラス ローダーにロードしてから、この新しいインターフェイスを変更する必要がありますか?

あなたが好きなら、しかし私は要点がわかりません。

可能であれば、この変更はコンパイル時に利用可能になりますか?

はい、単語を Integer から Boolean に変更します。IDE で行う方がはるかに簡単です。

于 2013-10-31T15:59:45.793 に答える