首先來看java元注解,分別是: - @Target
- @Retention
- @Documented
- @Inherited
這些注解和他們所修飾的類在java.lang.annotation包中,代碼都很簡單,可以去查看一下。 @Target 描述注解的使用范圍,取值: - ElementType.CONSTRUCTOR:描述構造器
- ElementType.FIELD:描述成員變量
- ElementType.VARIABLE: 描述局部變量
- ElementType.METHOD: 描述方法
- ElementType.PACKAGE: 描述包
- ElementType.PARAMETER:描述方法的參數
- ElementType.Type: 描述類,接口(包括注解類型)或enum聲明.
@Retention 注解的聲明周期,即在什么級別保留,取值: - RetentionPoicy.SOURCE :在源文件中有效(在.java文件中有效)
- RetentionPoicy.CLASS: 在class文件中有效
- RetentionPoicy.RUNTIME:在運行時有效
@Documented 用于描述其他類型的annotation應該被作為被標注的程序成員的公共API,可以被javdoc的工具文檔化,無成員。 @Inherited 用于標注某個標注是被繼承的,即父類中使用了一個Annotation,則子類繼承父類的這個annotation,annotation需要標記為RUNTIME的才可以。 java內置注解以上是元標記,再看java內置的標準注解,@Override,@Deprecated, @SuppressWarnings @Override - @Target(ElementType.METHOD)
- @Retention(RetentionPolicy.SOURCE)
- public @interface Override {
- }
從前面的元注解介紹可以看到,Override用于標注方法,有效期是在源碼期間。用于標注方法重寫。 @Deprecated - @Documented
- @Retention(RetentionPolicy.RUNTIME)
- public @interface Deprecated {
- }
標注 過時,或者不建議使用,也是會保留到運行時,添加了Documented元標簽,這樣在生成文檔時候,就可以生成過時的標記。 @SuppressWarnings - @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
- @Retention(RetentionPolicy.SOURCE)
- public @interface SuppressWarnings {
- String[] value();
- }
忽略錯誤報告,有效時是源碼級。 自定義注解我們再來看看如何自定義注解。自定義的注解就和java內置的注解類似,也需要用到元注解,通過遠注解設置那些地方可以使用,設置作用域。比如: - @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.METHOD)
- public @interface MyAnnotation {
- int value() default;
- }
- @Retention(RetentionPolicy.SOURCE)
- @Target(ElementType.METHOD)
- public @interface MyNewAnnotation{
- String author();
- int version() default 1;
- }
- public class MyClass {
- @MyAnnotation(12)
- public boolean isOK() {
- return true;
- }
- @MyNewAnnotation(author=“sam”, version=2)
- public int getAge() {
- return 19;
- }
- }
上面前面的代碼是定義注解,后面是使用??梢钥吹绞褂聾interface來定義注解。 注解配置參數名為注解類的方法名,并且方法沒有方法體,沒有參數沒有修飾符,不可以拋異常。返回值只能是基本類 型,String,Class,annotation,enumeration,或者他們的一維數組。只有一個默認屬性,可以直接用value()函數, 沒有屬性,則這個注解是標記注解??梢约觗efault表示默認值。 Android內置注解作為android程序員,我們還是了解一下android中自帶的注解,以及用法含義。 @SuppressLint : 指示lint檢查時忽略注解元素的警告信息。
@TargetApi :指示lint把當前這個注解元素的target api為指定值,而不是項目設置的target api。
@NonNull :表示一個成員變量,或者參數,或者方法返回值永遠不能為NULL。
@Nullable :標識一個成員變量,或者參數,方法返回值,可以為NULL。
android.support.annotation包中還有更多的注解可以使用。 原文地址:http://blog./2015/03/06/java-annotation/
|