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

标签 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 void handle(MyObject obj) {
        Method handler = methodMap.get(obj.getType());
        handler.invoke(.....);
    }

    private handleTypeA() {
        ....
    }

    private 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() {
        ....
    }
}

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

关于java - 我可以用 java 注释做这种事情吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10540212/

相关文章:

Java URL : invalid query

java - 为什么 StringTokenizer 不能正常使用 $$ 作为分隔符

java - 获取时间四舍五入到最接近的 5 分钟间隔并仅将分钟转换为字符串

java - 从java中带注释的bean获取数据库列名称

java - 使用用户定义的注释生成编译器警告

iphone - 如何在 map 首次加载时自动打开 map 上的注释标注?

java - 在 ZeroMQ 中使用 .poll() 和 .recv() 方法有什么区别?

java - Swing:获取JFrame的图像

java - 删除 @ManyToMany 关联期间发生 Hibernate 异常

java - 为特定注释禁用 Jackson 映射器