2

未処理のメソッドを処理できるデフォルトまたはフォールバックのオーバーライド メソッドを定義する方法はありますか?

私がこれを尋ねる理由は、常に変更される可能性のある関数ライブラリ内のクラスをオーバーライドするクラスを作成したためです。クラスを正常にコンパイルするには、すべてのメソッドを定義してオーバーライドする必要がありますが、更新があるたびにクラスを再コーディングしたくありません。

書かれている内容の例を次に示します。

public class CommandSignsPlayerProxy implements Player {

    private Player proxy;
    private boolean silent;

    public CommandSignsPlayerProxy(Player targetPlayer) {
        this.proxy = targetPlayer;
    }

    public boolean isSilent() {
        return silent;
    }

    public void setSilent(boolean silent) {
        this.silent = silent;
    }

    @Override
    public void abandonConversation(Conversation conversation, ConversationAbandonedEvent details) {
        proxy.abandonConversation(conversation, details);
    }

    // This function is basically the only one that NEEDS overriding
    @Override
    public void sendMessage(String message) {
        if (!silent)
            proxy.sendMessage(message);
    }

    @Override
    public void setFlySpeed(float arg0) throws IllegalArgumentException {
        proxy.setFlySpeed(arg0);
    }

}

実際のコードには、さらに 50 以上のオーバーライドされた関数があります。function_name()でオーバーライドする自動ハンドラーを作成する方法はありますproxy.function_name()か?

4

1 に答える 1

2

動的プロキシがこれを実行できる場合があります。ドキュメントから:

動的プロキシクラスは、実行時に指定されたインターフェイスのリストを実装するクラスであり、クラスのインスタンスのインターフェイスの1つを介したメソッド呼び出しがエンコードされ、統一されたインターフェイスを介して別のオブジェクトにディスパッチされます。したがって、動的プロキシクラスを使用すると、コンパイル時ツールなどを使用してプロキシクラスを事前に生成しなくても、インターフェイスのリストに対してタイプセーフなプロキシオブジェクトを作成できます。

動的プロキシクラスのインスタンスでのメソッド呼び出しは、インスタンスの呼び出しハンドラー内の単一のメソッドにディスパッチされ、呼び出されたメソッドを識別するjava.lang.reflect.Methodオブジェクトと、引数。

于 2012-09-28T20:22:54.133 に答える