国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

進擊的Android工程師之Java基礎: 注解

muddyway / 2118人閱讀

摘要:基本語法我們通過注解的定義來切入注解的語法。跟定義接口差不多,就是用到的是,然后加上了元注解。那么元注解的作用是什么呢元注解元注解說明了注解所修飾對象的類型。也就是標識該注解可以被繼承。的內置注解重寫了父類的方法表示已過時,不推薦使用。

在Android開發中我們經常會用到注解,例如@Override Butterknife中的BindView等。這里主要記錄下注解怎么寫和簡單的使用。

基本語法

我們通過Override注解的定義來切入注解的語法。

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.SOURCE)
    public @interface Override {
    }

在java源碼中,通過上面的幾行代碼就定義了一個Override的注解,定義注解的時候用到了兩個元注解Target,Retention。什么是元注解?注解注解的注解就是元注解。跟定義接口差不多,就是用到的是@interface,然后加上了元注解。那么元注解的作用是什么呢?

元注解

元注解:@Target,@Retention,@Documented,@Inherited

@Target

@Target說明了注解所修飾對象的類型。由EelmentType所描述

public enum ElementType {
    TYPE, //class interface enum
    FIELD, //域
    METHOD, //方法
    PARAMETER, //參數
    CONSTRUCTOR, //構造
    LOCAL_VARIABLE, //局部變量
    ANNOTATION_TYPE, //注解
    PACKAGE, //包
}

實例:

/**
 * 這樣我們就定義了一個作用在類型和域上面的注解
 */
@Target({ElementType.TYPE, ElementType.FIELD})
public @interface Entity {
}
@Retention

@Retention 表明注解作用的時間。由RetentionPolicy所描述

public enum RetentionPolicy {
    /**
     * 只在源碼顯示,編譯時丟棄;
     */
    SOURCE,

    /**
     * 編譯時記錄到.class中,運行時忽略;默認值
     */
    CLASS,

    /**
     * 運行時保留,運行中可以處理。(我們用的較多的就是這個)
     */
    RUNTIME
}
@Documented

含有該注解類型的元素(帶有注釋的)會通過javadoc或類似工具進行文檔化。
我們來對比一下:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NoDocumented {
}

@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestDocumented {
}
    
    @TestDocumented
    public void funTestDocumented(){
        System.out.println("有@Documented");
    }

    @NoDocumented
    public void funNoDocucmented(){
        System.out.println("無@Documented");
    }

定義以上兩個注解并測試,利用javadoc生成文檔后顯示如下:

@Inherited

根據字面意思是繼承。也就是標識該注解可以被繼承。只作用在類上面。

注解參數
@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Entity {
    String value() default "";
    int name() default 0;
}

我們在定義注解的時候,可以添加相關的參數。定義了參數之后我們就可以通過反射的方式獲取到注解,然后獲取該參數了。如下所示:

        Class cClass = TestInheritedC.class;
        Entity annotation = cClass.getAnnotation(Entity.class);
        if (annotation != null) {
            String value = annotation.value();
            int name = annotation.name();
            System.out.println("value = " + value + "  name = " + name);
        }

注解參數的類型包括:基本數據類型,String,Class,Enum,Annotation,及前邊這些類型的數組類型

Java的內置注解

@Override 重寫了父類的方法
@Deprecated 表示已過時,不推薦使用。一般在使用被標注的方法、類等時編輯器會出現刪除線。
@@SuppressWarnnings 用于通知Java編譯器關閉對特定類、方法、成員變量、變量初始化的警告

Android的相關注解
compile "com.android.support:support-annotations:24.2.0"

support-annotations包為我們提供了很多實用的注解,來方便代碼的檢查,例如 @Nullable ,@NonNull等,具體的使用參考Android官方文檔。

這里說一下類型的定義IntDefStringDef,在開發中經常要使用Enum類型。不過Enum在開發中性能不如常量。我們可以使用注解的方式進行替換。例如下面是View源碼中的一個栗子

    @IntDef({VISIBLE, INVISIBLE, GONE})
    @Retention(RetentionPolicy.SOURCE)
    public @interface Visibility {}

借用官方文檔上的栗子,是這么使用的:

    // Define the list of accepted constants and declare the NavigationMode annotation
    @Retention(RetentionPolicy.SOURCE)
    @IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
    public @interface NavigationMode {}

    // Declare the constants
    public static final int NAVIGATION_MODE_STANDARD = 0;
    public static final int NAVIGATION_MODE_LIST = 1;
    public static final int NAVIGATION_MODE_TABS = 2;

    // Decorate the target methods with the annotation
    @NavigationMode
    public abstract int getNavigationMode();

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68797.html

相關文章

  • 進擊Android程師Java基礎: 反射

    摘要:不包含父類或父接口的方法返回,根據方法名和類型獲取。類或接口的及父類父接口公共成員方法。是的返回方法名,不包括修飾符,參數和返回值。打印打印拋出因為的訪問權限為拋出,因為是父類的方法。 反射機制呢就是在程序運行時,動態的獲取類(class),類的方法(method)屬性(field)等。主要的注意點就是程序運行時動態的獲取。這里主要是從代碼的角度來講解Java反射。在使用中我們用的較多...

    aaron 評論0 收藏0
  • Java 總結

    摘要:中的詳解必修個多線程問題總結個多線程問題總結有哪些源代碼看了后讓你收獲很多,代碼思維和能力有較大的提升有哪些源代碼看了后讓你收獲很多,代碼思維和能力有較大的提升開源的運行原理從虛擬機工作流程看運行原理。 自己實現集合框架 (三): 單鏈表的實現 自己實現集合框架 (三): 單鏈表的實現 基于 POI 封裝 ExcelUtil 精簡的 Excel 導入導出 由于 poi 本身只是針對于 ...

    caspar 評論0 收藏0
  • SegmentFault 技術周刊 Vol.22 - 進擊 Google I/O 2017

    摘要:谷歌表示,與搜索并列,是谷歌機器學習技術最重要的產品服務載體。谷歌宣布了基于機器學習技術的全面升級,很可能是其誕生以來的最大升級。在去年的大會上,谷歌宣布了其第一代。 showImg(https://segmentfault.com/img/bVNTKT?w=900&h=385); Google I/O Google I/O 是由 Google 舉行的網絡開發者年會,討論的焦點是用 G...

    darkbaby123 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<