注解

從jdk1.5開始,java提供了注解的功能,允許開發(fā)者定義和使用自己的注解類型,該功能由一個(gè)定義注解類型的語法和描述一個(gè)注解聲明的語法,讀取注解的API,
關(guān)鍵字@interface.使用@interface表示我們已經(jīng)繼承了java.lang.annotation.Annotation類,這是一個(gè)注解的基類接口。

@interface是用于自定義注解的,它里面定義的方法的聲明不能有參數(shù),也不能拋出異常,并且方法的返回值被限制為簡單類型、String、Class、emnus、@interface,和這些類型的數(shù)組。

通常在使用時(shí)我們都會給這個(gè)注解類加上兩個(gè)注解:
@Target(ElementType.FIELD), @Retention(RetentionPolicy.RUNTIME)
ElementType,RetentionPolicy是兩個(gè)枚舉類,

注解@Target也是用來修飾注解的元注解,它有一個(gè)屬性ElementType也是枚舉類型,值為:ANNOTATION_TYPE,CONSTRUCTOR ,F(xiàn)IELD,LOCAL_VARIABLE,METHOD,PACKAGE,PARAMETER和TYPE,如@Target(ElementType.METHOD) 修飾的注解表示該注解只能用來修飾在方法上。
@RetentionRetention注解表示需要在什么級別保存該注釋信息,用于描述注解的生命周期,它有一個(gè)RetentionPolicy類型的value,是一個(gè)枚舉類型,它有以下的幾個(gè)值:
1.用@Retention(RetentionPolicy.SOURCE)修飾的注解,指定注解只保留在源文件當(dāng)中,編譯成類文件后就把注解去掉; 2.用@Retention(RetentionPolicy.CLASS)修飾的注解,指定注解只保留在源文件和編譯后的class 文件中,當(dāng)jvm加載類時(shí)就把注解去掉; 3.用@Retention(RetentionPolicy.RUNTIME )修飾的注解,指定注解可以保留在jvm中,這樣就可以使用反射獲取信息了。
默認(rèn)是RUNTIME,這樣我們才能在運(yùn)行的時(shí)候通過反射獲取并做對應(yīng)的邏輯處理。


android中的注解式綁定控件其實(shí)本質(zhì)的使用就是Java基礎(chǔ)中反射的使用。


JAVA泛型--Class<T>

類Class已經(jīng)泛型化了。
在以前的JDK中,Class.newInstance()方法的定義返回Object,您很可能要將該類型強(qiáng)制轉(zhuǎn)換為另一種類型:

class Class{
Object newInstance();
}

但是使用泛型,您定義的Class.newInstance()方法具有一個(gè)更加特定的返回類型:

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容