2016-02-22 32 views
1

我写简单的应用程序。我不想使用任何框架。请建议我正确的地方举行注释处理。注释处理的正确位置在哪里?

我在main方法的几行:

String myString = (@NonNull String)list; 

我创建@interface

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

我应该采取哪一步下一个?我可以在不使用反射的情况下使用注释吗?您能否为我公开这些注释处理代码的样本?

+0

下一步是创建一个注释处理器。看看[这里](http://programmaticallyspeaking.com/playing-with-java-annotation-processing.html)和[这里](http://www.javacodegeeks.com/2012/08/java-annotations-探索解释.html)看看如何做到这一点。 – aribeiro

回答

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.. */ 

      } 
     } 
} 

我希望这会帮助你。

0

你没有说你想做什么样的注解处理。

如果在运行时list一直为空,您是否想要添加运行时检查将导致您的代码崩溃?为此,反思将起作用。

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

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

相关问题