注解

從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基礎中反射的使用。


JAVA泛型--Class<T>

類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();
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容