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 回答