React中JSX的理解
阿新 • • 發佈:2020-12-19
宣告註解
宣告一個註解要用到的東西
- 修飾符
訪問修飾符必須為public,不寫預設為pubic; - 關鍵字
關鍵字為@interface; - 註解名稱
註解名稱為自定義註解的名稱,使用時還會用到; - 註解型別元素
註解型別元素是註解中內容,可以理解成自定義介面的實現部分;
元註解
@Target
表明該註解可以應用的java元素型別
Target型別 | 描述 |
---|---|
ElementType.TYPE | 應用於類、介面(包括註解型別)、列舉 |
ElementType.FIELD | 應用於屬性(包括列舉中的常量) |
ElementType.METHOD | 應用於方法 |
ElementType.PARAMETER | 應用於方法的形參 |
ElementType.CONSTRUCTOR | 應用於建構函式 |
ElementType.LOCAL_VARIABLE | 應用於區域性變數 |
ElementType.ANNOTATION_TYPE | 應用於註解型別 |
ElementType.PACKAGE | 應用於包 |
ElementType.TYPE_PARAMETER | 1.8版本新增,應用於型別變數) |
ElementType.TYPE_USE | 1.8版本新增,應用於任何使用型別的語句中(例如宣告語句、泛型和強制轉換語句中的型別) |
@Retention
表明該註解的生命週期
生命週期型別 | 描述 |
---|---|
RetentionPolicy.SOURCE | 編譯時被丟棄,不包含在類檔案中 |
RetentionPolicy.CLASS | JVM載入時被丟棄,包含在類檔案中,預設值 |
RetentionPolicy.RUNTIME | 由JVM 載入,包含在類檔案中,在執行時可以被獲取到 |
@Document
表明該註解標記的元素可以被Javadoc 或類似的工具文件化
@Inherited
表明使用了@Inherited註解的註解,所標記的類的子類也會擁有這個註解
註解配置
例子
@Target({ElementType.FIELD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Info {
String value() default "tracy";
boolean isDelete();
}
@Data
@Builder
// 為Person類配置了剛剛定義的註解@Info
@Info(isDelete = true)
public class Person {
/**
* 姓名
*/
private String name;
/**
* 年齡
*/
private int age;
/**
* 是否有效
*/
private boolean isDelete;
}
解析註解
public class AnnotationTest {
public static void main(String[] args) {
try {
//獲取Person的Class物件
Person person = Person.builder().build();
Class clazz = person.getClass();
//判斷person物件上是否有Info註解
if (clazz.isAnnotationPresent(Info.class)) {
System.out.println("Person類上配置了Info註解!");
//獲取該物件上Info型別的註解
Info infoAnno = (Info) clazz.getAnnotation(Info.class);
System.out.println("person.name :" + infoAnno.value() + ",person.isDelete:" + infoAnno.isDelete());
} else {
System.out.println("Person類上沒有配置Info註解!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}