Java注解使用的幾個小技巧:
最近經常用到注解,總結了幾個注解使用的小技巧,現整理如下:
一、使用默認的注解參數:
使用default關鍵字可以指定注解的默認參數:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SQL {
String sql() default "";
}
如果我們在使用注解@SQL的時候沒有顯式的去指定sql參數,那么就默認采取default關鍵字所指定的值
二、用value指定默認值
我們經常看到很多注解是這種形式,例如:@SQL("select email from user")
這個注解里面的參數為什么沒有帶名稱呢?其實它的注解是這樣定義的:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SQL {
String value() default "";
}
三、在注解中使用數組參數
如果你用過Struts2的注解來配置Action,那么你會看到如下形式的注解:
@Results({
@Result(name="success",value=xxx
.jsp",type=org.apache.struts2.dispatcher.ServletRedirectResult.class),
@Result(name="input",value="/xxx
.jsp",type=org.apache.struts2.dispatcher.ServletRedirectResult.class)
})
怎么來創建這種注解呢?
其實可以把@Results的參數看作是一個@Result的數組
定義如下:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Result {
}
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Results {
Result[] value(); //沒什么特別的,只是接受了一個數組參數而已
}
四、讓注解可以去修飾多個Target類型
我么使用@Target注解來指定某個注解可以修飾的類型,實際上,同上面一樣,@Target接受的是一個數組參數,利用這一特性我們可以讓注解來修飾多個類型。
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.PARAMETER,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Param {
}
OK!這個注解既可以修飾參數也可以修飾類的屬性