2

呼び出す一連のメソッドと、次のようなメイン ハンドラーがあります。

public class MyHander
{
    HashMap<String, Method> methodMap = ...;

    static {
        ... fill the methodMap by looking up local methods
        methodMap.put("typeA", findMethod("handleTypeA"));
        .... etc.
    }

    public void handle(MyObject obj) {
        Method handler = methodMap.get(obj.getType());
        handler.invoke(.....);
    }

    private handleTypeA() {
        ....
    }

    private handleTypeB() {
        ....
    }
}

したがって、これは通常、個々のハンドラー メソッドを呼び出すために行うことです。メソッド handleTypeA()、handleTypeB() などに注釈を付けてから、メインの handle() メソッドで正しいものを見つけることで、同様のことを行うことができますか?

4

1 に答える 1

1

はい、受け入れられる型をリストしたハンドラー メソッドの注釈を作成し、それらを処理してハンドラー マップを返すクラスを作成できます。これにより、静的イニシャライザ内のエラーが発生しやすいコードが、テスト可能なファクトリ クラスに移動されます。

public class MyHander
{
    HashMap<String, Method> methodMap = HandlerType.buildMap(MyHandler.class);

    public void handle(MyObject obj) {
        Method handler = methodMap.get(obj.getType());
        handler.invoke(.....);
    }

    @HandlerType({"typeA", "typeAprime"})
    private handleTypeA() {
        ....
    }

    @HandlerType({"typeB"})
    private handleTypeB() {
        ....
    }
}

HandlerType.buildMapリフレクションを使用して注釈を処理します。デフォルトの注釈パラメーターとして配列を渡すか、コンマ区切りの文字列としてエンコードするなどの巧妙なことを行うことができることを確認する必要があります。

于 2012-05-10T18:51:22.277 に答える