我可以用java注释做这种事情吗?

我可以用java注释做这种事情吗?,java,annotations,Java,Annotations,我调用了一组方法和一个主处理程序,如下所示: public class MyHander { HashMap<String, Method> methodMap = ...; static { ... fill the methodMap by looking up local methods methodMap.put("typeA", findMethod("handleTypeA")); .... etc.

我调用了一组方法和一个主处理程序,如下所示:

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() {
        ....
    }
}
公共类MyHander
{
HashMap methodMap=。。。;
静止的{
…通过查找本地方法来填充methodMap
methodMap.put(“typeA”,findMethod(“handleTypeA”);
等
}
公共无效句柄(MyObject对象){
方法处理程序=methodMap.get(obj.getType());
handler.invoke(…);
}
私有handleTypeA(){
....
}
私有handleTypeB(){
....
}
}

这就是我通常调用我的单个处理程序方法的方法。我是否可以通过注释handleTypeA()、handleTypeB()等方法,然后在我的主handle()方法中找到正确的方法来执行类似的操作?

是的,您可以为处理程序方法创建一个注释,列出它们接受的类型,并创建一个类来处理它们并返回处理程序映射。这将把静态初始值设定项中容易出错的代码移动到可测试的工厂类中

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() {
        ....
    }
}
公共类MyHander
{
HashMap methodMap=HandlerType.buildMap(MyHandler.class);
公共无效句柄(MyObject对象){
方法处理程序=methodMap.get(obj.getType());
handler.invoke(…);
}
@HandlerType({“typeA”,“typeAprime”})
私有handleTypeA(){
....
}
@HandlerType({“typeB”})
私有handleTypeB(){
....
}
}

HandlerType.buildMap
将使用反射来处理注释。您需要确保可以将数组作为默认注释参数传递,或者执行一些巧妙的操作,例如将其编码为逗号分隔的字符串。

因此,在
handleTypeA()上执行类似于
@Handle(TypeA.class)
的操作
?这似乎更适合使用策略模式,而不是注释处理——至少对我来说是这样。或者是访问者模式?