注释处理的正确位置在哪里?

时间:2016-02-22 12:55:44

标签: java reflection annotations

我写简单的应用程序。我不想使用任何框架。请建议我正确的地方进行注释处理。

我在main方法中有几行:

String myString = (@NonNull String)list;

我创建了@interface

@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
public @interface NonNull {
}

接下来我应该采取哪一步?我可以在不使用反射的情况下使用注释吗?你能告诉我这样的注释处理代码的样本吗?

2 个答案:

答案 0 :(得分:1)

没有办法(AFAIK)可以在没有反射的情况下使用注释。

如果您不想使用任何框架,第一步是编写处理方法请求的代理类。这是使用注释的方法处理示例:

public class MyProxy {
       private <T> T getProxy(T t) {
        return (T) Proxy.newProxyInstance(t.getClass().getClassLoader(), new Class<?>[]{MyClass.class},  new MyInvocationHandler(t));
    }
}

然后实现InvocationHandler:

    public class MyInvocationHandler implements InvocationHandler {

        private Object obj;

        MyInvocationHandler (Object obj) {
            this.obj = obj;
        }

        @Override
        public Object invoke(Object proxy, final Method method, final Object[] args) throws Throwable {
            boolean isNotNull = method.isAnnotationPresent(NotNull.class);

            if (isNotNull) {
    /* process annotated method. Or go through proxy object fields etc.. */

            }
        }
}

我希望它会对你有所帮助。

答案 1 :(得分:0)

你没有说出你想要做什么样的注释处理。

是否要添加运行时检查,如果list在运行时始终为null,则会导致代码崩溃?为此,反思将起作用。

如果在运行时无法证明list永远不为空,是否要添加拒绝代码的编译时检查?为此,注释处理器(例如Checker Framework)将起作用。

您的问题无法解释您为什么不想使用框架。这样做可以避免重新实现其他人已经创建的许多功能。