從jdk1.5開始,java提供了注解的功能,允許開發者定義和使用自己的注解類型,該功能由一個定義注解類型的語法和描述一個注解聲明的語法,讀取注解的API,
關鍵字@interface.使用@interface表示我們已經繼承了java.lang.annotation.Annotation類,這是一個注解的基類接口。
@interface是用于自定義注解的,它里面定義的方法的聲明不能有參數,也不能拋出異常,并且方法的返回值被限制為簡單類型、String、Class、emnus、@interface,和這些類型的數組。
通常在使用時我們都會給這個注解類加上兩個注解:
@Target(ElementType.FIELD), @Retention(RetentionPolicy.RUNTIME)
ElementType,RetentionPolicy是兩個枚舉類,
注解@Target也是用來修飾注解的元注解,它有一個屬性ElementType也是枚舉類型,值為:ANNOTATION_TYPE,CONSTRUCTOR ,FIELD,LOCAL_VARIABLE,METHOD,PACKAGE,PARAMETER和TYPE,如@Target(ElementType.METHOD) 修飾的注解表示該注解只能用來修飾在方法上。
@RetentionRetention注解表示需要在什么級別保存該注釋信息,用于描述注解的生命周期,它有一個RetentionPolicy類型的value,是一個枚舉類型,它有以下的幾個值:
1.用@Retention(RetentionPolicy.SOURCE)修飾的注解,指定注解只保留在源文件當中,編譯成類文件后就把注解去掉; 2.用@Retention(RetentionPolicy.CLASS)修飾的注解,指定注解只保留在源文件和編譯后的class 文件中,當jvm加載類時就把注解去掉; 3.用@Retention(RetentionPolicy.RUNTIME )修飾的注解,指定注解可以保留在jvm中,這樣就可以使用反射獲取信息了。
默認是RUNTIME,這樣我們才能在運行的時候通過反射獲取并做對應的邏輯處理。
android中的注解式綁定控件其實本質的使用就是Java基礎中反射的使用。
類Class已經泛型化了。
在以前的JDK中,Class.newInstance()方法的定義返回Object,您很可能要將該類型強制轉換為另一種類型:
class Class{
Object newInstance();
}
但是使用泛型,您定義的Class.newInstance()方法具有一個更加特定的返回類型:
class Class{
T newInstance();
}
View child
Class<?> childClass = child.getClass();//獲得該類型的類型類
DefaultBehavior = defaultBehavior = null;
defaultBehavior = childClass.getAnnotation(DefaultBehavior.class)) == null
result.setBehavior(defaultBehavior.value().newInstance());
result.setBehavior(defaultBehavior.value().newInstance());
@Retention(RetentionPolicy.RUNTIME)
public @interface DefaultBehavior{
Class <? extends Behavior> value();
}