我写简单的应用程序。我不想使用任何框架。请建议我正确的地方进行注释处理。
我在main
方法中有几行:
String myString = (@NonNull String)list;
我创建了@interface
:
@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
public @interface NonNull {
}
接下来我应该采取哪一步?我可以在不使用反射的情况下使用注释吗?你能告诉我这样的注释处理代码的样本吗?
答案 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)将起作用。
您的问题无法解释您为什么不想使用框架。这样做可以避免重新实现其他人已经创建的许多功能。