android寫註解

ps:寫的很亂,沒什麼參考價值,我也是懵懵懂懂中,剛理清點套路,下次清晰到能講了再寫一篇

愁死我了,本來想自己封裝個6.0動態獲取權限工具類,查了查相關資料,看鴻洋大神的封裝不錯,activity和fragment用一套就可以,直接就開始學習加改造了,是我太天真,以爲簡簡單單的註解看看就能學會,結果,,,,哎,決定寫這篇博客就是因爲我遇到這樣一個問題:這裏寫圖片描述
啥都找不到???開始以爲是忘記引入什麼包了,跑去看hy大神的博客,人家這麼寫的,也沒有什麼我沒引的包啊!!!!!百度一查,大家都是直接用的,我怎麼就死活不行呢????昨天一天搞個註解都搞不出來,瘋了瘋了。。

這裏說明一下,我要是和hy大神寫的一摸一樣肯定沒問題,問題是不一樣出現這個問題。哪兒不一樣?我倆格式不一樣,HY大神是這樣:這裏寫圖片描述
compiler 以 lib 的形式被 sample 引用。
而我就“厲害了”,我非想不這麼麻煩,直接在工程裏建個包放compiler 就好了嘛!!!,我這麼寫的:這裏寫圖片描述
就這樣差點搞死自己。。。。原因就是第一張圖,各種找不到包。。怪我蠢,昨天真折騰了一天。

今天靈機一動,又百度了一下:java與javax包的區別:
java和javax都是Java的API包,java是核心包,javax的x是extension的意思,也就是擴展包。

看到有人在eclipse上也找不到javax包,他在gradle文件里加了這樣一句(這是我仿寫的,他是jdk1.7):compile files(‘C:/Program Files/Java/jdk1.8.0_101/jre/lib/rt.jar’)
然後發現所有的javax包都找到了。運行發現不行。報錯:
這裏寫圖片描述
我猜是因爲我jdk1.8的關係,我找個1.7的試試。
找了,發現換不了,studio只支持1.8及以上的,。。。。也許有可以的方法,但這麼做總歸是不好的,畢竟1.8有了新的方法。現在才知道hy大神寫成那樣是有原因的。

so?我還是照着hy大神的來吧,反正原理讀懂了。而且挺喜歡這種註解的方式的。

只要把compiler 建成java lib 的形式就可以了,別建android的。真不要臉!不過畢竟註解是人家java的,android基礎課程裏都不帶講的。算了沒啥計較的。由於Android目前不是完全支持Java 8的語言特性,會導致編譯出錯。這裏新建的lib會自動將項目的源和目標兼容性值保留爲 Java 7。

好了,既然都寫到這裏了,就把註解也簡單記一下吧,順便解釋下hy大神的註解寫法,感覺挺高級的。

註解

  1. java中常見的註解
  2. 定義註解
  3. 使用

java中常見的註解

這裏寫圖片描述

定義註解

@interface 是定義註解

/**
 * git_workspace
 * <p>
 * 定義一個註解
 *
 * @author liyuanli
 * @data 2017/10/25
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description {

    String value();

//    String desc();
//
//    String author();
//
//    int age() default 18;
}

interface是定義一個接口

/**
 * git_workspace
 * 定義一個接口
 * @author liyuanli
 * @data 2017/10/25
 */

public interface Person {

    public String name();

    public String sing();
}
  • *定義註解時各屬性的含義及注意事項*

    target是註解使用的位置或者說使用的對象,及時給類還是給方法定義的這個註解
    這裏寫圖片描述

retention是註解什麼時候存在,圖上挺清楚的
這裏寫圖片描述

inherited代表允許子類繼承:android不常用

documented:生成javadoc時會生成註解,這裏android是不能用的,是javaee之類java開發工具可用的,例如後臺寫好的接口有加註釋生成給移動組看,所以andoird用不着

這裏是成員的說明,及註解中的方法。第二句提到一個成員時取名爲value,這裏不寫成value也是不報錯的,不過大家約定俗稱的引用的時候如果只有一個成員就不寫鍵了直接寫值,這時候默認的鍵是value,所以,如果不把方法名寫成value,引用的時候只有一個成員還不能直接寫值會有點奇怪。
這裏寫圖片描述
成員方法不能帶有參數而且不能自定義異常即不能extends Exception
這裏寫圖片描述

http://blog.csdn.net/industriously/article/details/53932425
看到篇很清楚的博客,非常棒,我都看懂了,更清晰了。看完我覺得我沒啥說的了。
具體的看看還有大神的代碼,就懂了。

簡單記一下,利用註解實現接口回調的方式

  • 首先一定要定義一個註解
    @interface格式的
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.CLASS)
public @interface ShowRequestPermissionRationale
{
    int value();
}
  • 寫一個接口
    interface 格式
public interface PermissionProxy<T> {

    void grant(T source, int requestCode);

    void denied(T source, int requestCode);

    void rationale(T source, int requestCode);

    boolean needShowRationale(int requestCode);
}
  • 使用註解
    @ShowRequestPermissionRationale(REQUECT_CODE_SDCARD)
    public void whyNeedSdCard() {
        Toast.makeText(this, "I need write news to sdcard!", Toast.LENGTH_SHORT).show();
        PermissionsUtil.requestPermissions(MainActivity.this, REQUECT_CODE_SDCARD, Manifest.permission.WRITE_EXTERNAL_STORAGE);
    }

。。。。。有點複雜,簡單記不了,這篇作廢,看完這本書重新鞏固的時候一定理清楚

發佈了48 篇原創文章 · 獲贊 12 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章