2016-02-22 40 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)將起作用。

你的問題沒有解釋你爲什麼不想使用框架。這樣做可以避免重新實現其他人已經創建的許多功能。

相關問題