Java元注解最全詳解(四大常用Java元注解)
Java元注解
Java元注解是java API提供的,是用于修飾注解的注解。
通過使用Java元注解,可以為注解指定:作用范圍、生命周期、是否可重復(fù)和是否繼承等信息,從而提高注解的靈活性和可擴(kuò)展性。
Java元注解分類
Java元注解是包括:@Retention、@Target、@Documented、@Inherited等。
如下圖所示:
圖片
這些元注解包括:
- @Retention:用來指定注解的保留期限,可以設(shè)置為SOURCE、CLASS或RUNTIME。
- @Target:用來指定注解可以應(yīng)用于哪些程序元素,包括類、方法、變量、參數(shù)等。默認(rèn)情況下,注解可以應(yīng)用于所有程序元素。
- @Documented:用來指定注解是否出現(xiàn)在Java文檔中。
- @Inherited:用來指定子類是否繼承父類的注解。
下面我就分別來詳解4大Java元注解@mikechen
1.@Target
@Target用于指定注解的作用范圍,它的取值包括:
圖片
- ElementType.TYPE:用于注解類、接口、枚舉和注解類型。
- ElementType.FIELD:用于注解字段、枚舉常量。
- ElementType.METHOD:用于注解方法。
- ElementType.PARAMETER:用于注解方法參數(shù)。
- ElementType.CONSTRUCTOR:用于注解構(gòu)造器。
- ElementType.LOCAL_VARIABLE:用于注解局部變量。
- ElementType.ANNOTATION_TYPE:用于注解其他注解類型。
- ElementType.PACKAGE:用于注解包。
@Target示例:
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
public @interface MyAnnotation {
// ...
}
這個示例中,@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})指定了MyAnnotation注解可以用于類、字段和方法。
2.@Retention
@Retention用于指定注解的生命周期,它的取值包括:
圖片
- RetentionPolicy.SOURCE:注解只保留在源代碼中,編譯時被忽略。
- RetentionPolicy.CLASS:注解被編譯到字節(jié)碼中,但運(yùn)行時被忽略(默認(rèn)值)。
- RetentionPolicy.RUNTIME:注解在運(yùn)行時也保留,并可以被反射機(jī)制讀取。
@Retention示例:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
// ...
}
這個示例中,@Retention指定了MyAnnotation注解的保留策略為RUNTIME,即可以在運(yùn)行時獲取到該注解的信息。
3.@Documented
@Documented指定注解是否包含在JavaDoc中,默認(rèn)情況下注解不會被包含在JavaDoc中。
如果想讓注解被包含在JavaDoc中,就需要使用@Documented注解。
@Documented示例:
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
// ...
}
這個示例中,@Documented注解指定了MyAnnotation注解可以被包含在JavaDoc中。
4.@Inherited
@Inherited用于指定注解是否可以被子類繼承。
@Inherited示例:
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
// ...
}