成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Annotation注解詳細(xì)介紹

callmewhy / 2399人閱讀

摘要:表示參數(shù)變量或者函數(shù)返回值應(yīng)該是一個(gè)類(lèi)型的資源,而不是顏色值。舉例子,閱讀源代碼中的方法值范圍注釋當(dāng)函數(shù)參數(shù)的取值在一定范圍時(shí),可以使用注解來(lái)防止調(diào)用者傳入錯(cuò)誤的參數(shù),主要注解有三種。使用這個(gè)注釋將警告信息去掉。

目錄介紹

1.Annotation庫(kù)的簡(jiǎn)單介紹

2.@Nullable和@NonNull

3.資源類(lèi)型注釋

4.類(lèi)型定義注釋

5.線(xiàn)程注釋

6.RGB顏色紙注釋

7.值范圍注釋

8.權(quán)限注釋

9.重寫(xiě)函數(shù)注釋

10.返回值注釋

11.@Keep注釋

12.@SuppressWarnings注解

13.其他

1.Annotation庫(kù)的簡(jiǎn)單介紹

包含一系列有用元注釋?zhuān)瑤椭_(kāi)發(fā)者在編譯期間發(fā)現(xiàn)可能存在的bug

是屬于Support Lib其中之一,獨(dú)立jar包

通過(guò)注釋來(lái)完善自身代碼質(zhì)量

官方文檔:

AndroidAnnotations是一個(gè)能讓你進(jìn)行快速開(kāi)發(fā)的開(kāi)源框架,它讓你關(guān)注真正重要的地方,它可以簡(jiǎn)化你的代碼,并且有利于你后期的維護(hù)

庫(kù)的特點(diǎn)

依賴(lài)注入(Dependency injection):支持view, extras, system service, resource等等

簡(jiǎn)單的線(xiàn)程模型(Simplified threading model):進(jìn)行方法注解以讓該方法在UI線(xiàn)程或后臺(tái)線(xiàn)程進(jìn)行執(zhí)行

事件綁定(Event binding):進(jìn)行方法注解以讓方法執(zhí)行view的時(shí)間而不用再添加一些監(jiān)聽(tīng)

REST client:創(chuàng)建一個(gè)接口,AndroidAnnotations用來(lái)實(shí)現(xiàn)

沒(méi)有神秘感(No magic):AndroidAnnotations在編譯時(shí)會(huì)產(chǎn)生一個(gè)子類(lèi),你可以查看子類(lèi)中的代碼來(lái)知道它是如何工作的.

編譯檢測(cè):提供的多種注解,用于檢測(cè)代碼編譯時(shí)可能存在的異常,并給開(kāi)發(fā)者相關(guān)提示,提高代碼質(zhì)量

AndroidAnnotations來(lái)實(shí)現(xiàn)這些美好的功能,只需要不到150kb的大小

相關(guān)文檔給出說(shuō)明

androidannotations.org

這篇文檔給出了案例,很好地說(shuō)明了注釋前后代碼的區(qū)別

2.@Nullable 和 @NonNull

說(shuō)明:

檢測(cè)參數(shù)或者方法返回值是否可以為null,這是該框架中最常用也是最基礎(chǔ)的注解之一了,使用了這兩個(gè)注解,在Android Studio中,如果出現(xiàn)代碼不安全的情況下,會(huì)給出智能提示

@Nullable作用于函數(shù)參數(shù)或者返回值,標(biāo)記參數(shù)或者返回值可以為空

@NonNull作用于函數(shù)參數(shù)或者返回值,標(biāo)記參數(shù)或者返回值不可以為空

@NonNull使用舉例【千萬(wàn)別忽視黃色警告-----這個(gè)淡黃色警告實(shí)際開(kāi)發(fā)中很容易忽視】

未加注釋?zhuān)?/p>

添加注釋?zhuān)?/p>

結(jié)論:可以看到加上的@NonNull注解后,AndroidStudio會(huì)自動(dòng)檢測(cè)不安全的代碼并給出友好提示,提示開(kāi)發(fā)者進(jìn)行修改

@Nullable 使用舉例

結(jié)論:將@Nullable作用在方法上,這樣方法的返回值是允許為null的,但是可能會(huì)導(dǎo)致某些情況下的crash;

3.資源類(lèi)型注釋

在我們平時(shí)開(kāi)發(fā)中我們肯定會(huì)經(jīng)常用到引用一些資源,比如圖片資源及字符串資源或者顏色值資源,因?yàn)檫@些資源的類(lèi)型都是int值,所以有時(shí)候我們?cè)诮oTextView設(shè)置字符串資源時(shí)也有可能引用了圖片資源ID,就會(huì)導(dǎo)致有問(wèn)題,比如會(huì)出現(xiàn)以下異常:

android.content.res.Resources$NotFoundException: String resource ID #0x3039

資源通常是以整型值表示的,保存在R.Java文章中。如果傳入資源值不對(duì),那么編譯器不會(huì)報(bào)錯(cuò),但是運(yùn)行期會(huì)報(bào)錯(cuò)。而注解可以避免這個(gè)問(wèn)題。

資源類(lèi)型注解主要都有哪些?

@StringRes : 表示參數(shù)、變量或者函數(shù)返回值應(yīng)該是一個(gè)字符串類(lèi)型的資源

@ColorInt : 表示參數(shù)、變量或者函數(shù)返回值應(yīng)該是一個(gè)顏色值而不是顏色資源引用,例如應(yīng)該是一個(gè) AARRGGBB 的整數(shù)值。

@ColorRes : 表示參數(shù)、變量或者函數(shù)返回值應(yīng)該是一個(gè) color 類(lèi)型的資源,而不是顏色值。注意和 ColorInt 區(qū)別

@AnimRes : 表示參數(shù)、變量或者函數(shù)返回值應(yīng)該是一個(gè) Anim 類(lèi)型的資源

@DrawableRes : 表示參數(shù)、變量或者函數(shù)返回值應(yīng)該是一個(gè) drawable 類(lèi)型的資源

@DimenRes : 表示參數(shù)、變量或者函數(shù)返回值應(yīng)該是一個(gè) dimension 類(lèi)型的資源

舉例子: 這里定義了一個(gè)方法,方法中只接受@StringRes注解的int引用

沒(méi)有添加注釋前

添加注釋后

結(jié)論:添加注釋可以在編譯器就找到錯(cuò)誤

5.線(xiàn)程注釋

線(xiàn)程注解主要是用于檢測(cè)一個(gè)函數(shù)是否在指定類(lèi)型的線(xiàn)程中執(zhí)行

類(lèi)型

@UiThread:標(biāo)記運(yùn)行在UI線(xiàn)程,一個(gè)UI線(xiàn)程是Activity運(yùn)行所在的主窗口,對(duì)于一個(gè)應(yīng)用而言,可能存在多個(gè)UI線(xiàn)程。每個(gè)UI線(xiàn)程對(duì)應(yīng)不同的主窗口。

@MainThread:標(biāo)記運(yùn)行在主線(xiàn)程,一個(gè)應(yīng)用只有一個(gè)主線(xiàn)程,主線(xiàn)程也是@UiThread線(xiàn)程。通常情況下,我們使用@MainThread來(lái)注解生命周期相關(guān)函數(shù),使用@UiThread來(lái)注解視圖相關(guān)函數(shù),一般情況下@MianThread和@UiThraed是可以互換的。

@WorkerThread:標(biāo)記運(yùn)行在后臺(tái)運(yùn)行線(xiàn)程。

@BinderThread:標(biāo)記運(yùn)行在Binder線(xiàn)程

舉例子

public void threadtest(){ 
    new Thread(new TimerTask() { 
        @Override 
        public void run() { 
            setTest(); 
        } 
    }).start(); 
} 

@UiThread 
public void setTest(){ 
    test.setText("測(cè)試"); 
}
那么上面會(huì)報(bào)錯(cuò)。提示:不做線(xiàn)程切換,只起到提示作用!

6.RGB顏色紙注釋

在資源類(lèi)型注解中我們使用@ColorRes來(lái)標(biāo)記參數(shù)類(lèi)型需要傳入顏色類(lèi)型的id,而使用@ColorInt注解是標(biāo)記參數(shù)類(lèi)型需要傳入RGB或者ARGB顏色值的整型值。

舉例子,閱讀TextView源代碼中的setTextColor方法

7.值范圍注釋

當(dāng)函數(shù)參數(shù)的取值在一定范圍時(shí),可以使用注解來(lái)防止調(diào)用者傳入錯(cuò)誤的參數(shù),主要注解有三種。

第一種

@Size:對(duì)于類(lèi)似數(shù)組、集合和字符串之類(lèi)的參數(shù),我們可以使用@Size注解來(lái)表示這些參數(shù)的大小。
用法:
@Size(min=1)//可以表示集合不可以為空
@Size(max=23)//可以表示字符串最大字符個(gè)數(shù)為23
@Size(2)//表示數(shù)組元素個(gè)數(shù)為2個(gè)
@Size(multiple=2)//可以表示數(shù)組大小是2的倍數(shù)

@IntRange:參數(shù)類(lèi)型是int或者long,用法如下

public void setInt(@intRange(from=0,to=255)){...}

@FloatRange:參數(shù)類(lèi)型是float或者double,用法如下

public void setFloat(@FloatRange(from=0.0,to=1.0)){...}

舉個(gè)例子

@FloatRange 用法

@Size用法

數(shù)組只能有2個(gè)元素: @Size(2)

8.權(quán)限注釋

Android應(yīng)用在使用某些系統(tǒng)功能時(shí),需要在AndroidManifest,xml中聲明權(quán)限,否則在運(yùn)行時(shí)就會(huì)提示缺失對(duì)應(yīng)的權(quán)限,為了在編譯時(shí)及時(shí)發(fā)現(xiàn)權(quán)限的缺失,我們可以使用@RequiresPermission注解。

如果需要一個(gè)權(quán)限則加注解。

@RequiresPermission(Manifest.permission.SET_WALLPAPER)

如果需要一個(gè)集合至少一個(gè)權(quán)限,那么就加注解。

@RequiresPermission(anyOf = {Manifest.permission.SET_WALLPAPER,Manifest.permission.CAMERA})

如果同時(shí)需要多個(gè)權(quán)限,那么就加注解。

@RequiresPermission(allOf = {Manifest.permission.SET_WALLPAPER,Manifest.permission.CAMERA})

對(duì)于Intent調(diào)用所需權(quán)限的ACTION字符串定義處添加注解。

@RequiresPermission(android.Manifest.permission.BLUETOOTH)
String ACTION_REQUEST_DISCOVERRAVLE = "android.bluetooth.adapter.REQUEST_DISCOVERRAVLE";

對(duì)于ContentProvider所需權(quán)限,可能有讀和寫(xiě)兩個(gè)操作。對(duì)應(yīng)不同的權(quán)限。

@RequiresPermission.Read(@RequestPermission(READ_HISTORY_BOOLMARKS))
@RequiresPermission.Write(@RequestPermission(WRITE_HISTORY_BOOLMARKS))
public static final Uri BOOKMARKS_URI = Uri.parse("content://browser/bookmarks);

9.重寫(xiě)函數(shù)注釋

如果API允許重寫(xiě)某個(gè)函數(shù),但是要求在重寫(xiě)該函數(shù)時(shí)需要調(diào)用super父類(lèi)的函數(shù)。

可以加注解@CallSuper來(lái)提示開(kāi)發(fā)者。若是重寫(xiě)不調(diào)用super就會(huì)報(bào)錯(cuò)

舉例子

10.返回值注釋

該注解是為了檢測(cè)方法返回值是否是需要使用的,如果沒(méi)有被使用,則AndroidStudio會(huì)給出警告提示

@CheckResult使用案例

添加注釋?zhuān)?/p>

11.@Keep注釋

@keep是用來(lái)標(biāo)記在Proguard混淆過(guò)程中不需要混淆的類(lèi)或者方法。在混淆時(shí)一些不需要混淆的會(huì)使用

-keep class com.foo.bar{public static }

有了@Keep之后,就可以在編碼時(shí)標(biāo)注出一些不需要混淆的類(lèi)或者方法

12.@SuppressWarnings注解

這個(gè)注解在源碼里是隨處可見(jiàn),其實(shí)它的用法很簡(jiǎn)單,就是對(duì)一些警告信息的過(guò)濾。

源代碼

這個(gè)注解是可以使用在屬性、方法、構(gòu)造方法、變量等等。那么它的參數(shù)就是一個(gè)字符串?dāng)?shù)組??梢詥蝹€(gè),可以多個(gè)。

示例

告訴編譯器忽略 unchecked 警告信息,如使用List,ArrayList等未進(jìn)行參數(shù)化產(chǎn)生的警告信息。
* @SuppressWarnings("serial")
如果編譯器出現(xiàn)這樣的警告信息:The serializable class WmailCalendar does not declare a static final serialVersionUID field of type long
使用這個(gè)注釋將警告信息去掉。
* @SuppressWarnings("deprecation")
如果使用了使用@Deprecated注釋的方法,編譯器將出現(xiàn)警告信息。
使用這個(gè)注釋將警告信息去掉。
* @SuppressWarnings("unchecked", "deprecation")
告訴編譯器同時(shí)忽略u(píng)nchecked和deprecation的警告信息。
* @SuppressWarnings(value={"unchecked", "deprecation"})
等同于@SuppressWarnings("unchecked", "deprecation")
```


13.其他

@EActivity、@ViewById、@Click

這三個(gè)注解應(yīng)該是對(duì)我們的代碼簡(jiǎn)潔性最有幫助的

@EActivity : 后面需要跟上一個(gè)layout id,來(lái)標(biāo)示該Activity所加載的xml布局,這樣原來(lái)的onCreate()方法就不用寫(xiě)了;

@ViewById : 與findViewById作用一致,而且@ViewById后面可以不寫(xiě)控件id,前提是控件變量名要與控件id一致

@Click : 也就是控件的點(diǎn)擊事件,而且如果控件ID與方法名一致,后面就不用寫(xiě)控件ID了. 該注解可以多帶帶寫(xiě),也可以對(duì)多個(gè)Button合并寫(xiě)

代碼案例

//這里加注解就可以不寫(xiě)onCreate方法 
@EActivity(R.layout.activity_test_annotation) 
public class TestAnnotation extends AppCompatActivity { 

    @ViewById(R.id.tv_name)//如果變量名和控件ID一致,后面就不用寫(xiě)id 
    TextView tv_name; 

    @Click(R.id.showName)//如果控件ID與方法名一致,后面就不用寫(xiě)id 
    public void showName(){ 
        Toast.makeText(this,tv_name.getText(),Toast.LENGTH_SHORT).show(); 
    } 
} 

關(guān)于其他內(nèi)容介紹 01.關(guān)于博客匯總鏈接

1.技術(shù)博客匯總

2.開(kāi)源項(xiàng)目匯總

3.生活博客匯總

4.喜馬拉雅音頻匯總

5.其他匯總

02.關(guān)于我的博客

我的個(gè)人站點(diǎn):www.yczbj.org,www.ycbjie.cn

github:https://github.com/yangchong211

知乎:https://www.zhihu.com/people/...

簡(jiǎn)書(shū):http://www.jianshu.com/u/b7b2...

csdn:http://my.csdn.net/m0_37700275

喜馬拉雅聽(tīng)書(shū):http://www.ximalaya.com/zhubo...

開(kāi)源中國(guó):https://my.oschina.net/zbj161...

泡在網(wǎng)上的日子:http://www.jcodecraeer.com/me...

郵箱:[email protected]

阿里云博客:https://yq.aliyun.com/users/a... 239.headeruserinfo.3.dT4bcV

segmentfault頭條:https://segmentfault.com/u/xi...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77224.html

相關(guān)文章

  • APT案例之點(diǎn)擊事件

    摘要:楊充一定時(shí)間內(nèi)該點(diǎn)擊事件只能執(zhí)行一次用來(lái)修飾這是一個(gè)什么類(lèi)型的注解。楊充自定義編譯器獲取遍歷,并生成代碼配置文件文件配置的作用是向系統(tǒng)注冊(cè)自定義注解處理器,執(zhí)行編譯時(shí)使用進(jìn)行處理。 目錄介紹 01.創(chuàng)建項(xiàng)目步驟 1.1 項(xiàng)目搭建 1.2 項(xiàng)目功能 02.自定義注解 03.創(chuàng)建Processor 04.compiler配置文件 05.編譯jar 06.如何使用 07.編譯生成代...

    cyixlq 評(píng)論0 收藏0
  • 關(guān)于Apt注解實(shí)踐與總結(jié)【包含20篇博客】

    摘要:使用實(shí)現(xiàn)功能運(yùn)行期注解案例使用簡(jiǎn)單的注解,便可以設(shè)置布局,等效于使用實(shí)現(xiàn)路由綜合型案例比較全面的介紹從零起步,一步一步封裝簡(jiǎn)易的路由開(kāi)源庫(kù)。申明注解用的就是。返回值表示這個(gè)注解里可以存放什么類(lèi)型值。 YCApt關(guān)于apt方案實(shí)踐與總結(jié) 目錄介紹 00.注解系列博客匯總 01.什么是apt 02.annotationProcessor和apt區(qū)別 03.項(xiàng)目目錄結(jié)構(gòu) 04.該案例作用 ...

    gnehc 評(píng)論0 收藏0
  • Sentinel: 使用注解限流

    摘要:要使用注解來(lái)保護(hù)資源需要引入下面的依賴(lài)引入之后我們需要配置切面讓其生效,因?yàn)槭峭ㄟ^(guò)切面來(lái)實(shí)現(xiàn)的,我這邊以中使用進(jìn)行配置示列然后在需要限制的方法上加注解即可錯(cuò)誤發(fā)生在表示資源名,必填項(xiàng)處理的方法名,可選項(xiàng)。 在前面我們對(duì)Sentinel做了一個(gè)詳細(xì)的介紹,可以手動(dòng)的通過(guò)Sentinel提供的SphU類(lèi)來(lái)保護(hù)資源。這種做法不好的地方在于每個(gè)需要限制的地方都得寫(xiě)代碼,從 0.1.1 版本開(kāi)始...

    Kross 評(píng)論0 收藏0
  • 手寫(xiě)Spring之DI依賴(lài)注入

    摘要:如感興趣,可移步手寫(xiě)之基于動(dòng)態(tài)創(chuàng)建對(duì)象手寫(xiě)之基于注解動(dòng)態(tài)創(chuàng)建對(duì)象今天將詳細(xì)介紹如何手寫(xiě)依賴(lài)注入,在運(yùn)行過(guò)程中如何動(dòng)態(tài)地為對(duì)象的屬性賦值。完成后在中會(huì)有相關(guān)的包出現(xiàn)進(jìn)行注入前需要?jiǎng)?chuàng)建工廠,在運(yùn)行時(shí)從工廠中取出對(duì)象為屬性賦值。 前兩篇文章介紹了關(guān)于手寫(xiě)Spring IOC控制反轉(zhuǎn),由Spring工廠在運(yùn)行過(guò)程中動(dòng)態(tài)地創(chuàng)建對(duì)象的兩種方式。如感興趣,可移步: 手寫(xiě)Spring之IOC基于xml...

    Cruise_Chan 評(píng)論0 收藏0
  • 注解就這么簡(jiǎn)單

    摘要:上面在將注解信息注入到方法中的時(shí)候,我們最后加上了的注解不然就會(huì)報(bào)錯(cuò)了那它是干什么用的呢只能用于修飾其他的,用于指定被修飾的被保留多長(zhǎng)時(shí)間。 前言 今天要講的是注解,對(duì)于本章節(jié),最好是有Servlet基礎(chǔ)的人查閱~因?yàn)閱渭兪荍ava基礎(chǔ)的話(huà),可能用不上注解這個(gè)東西。但如果開(kāi)發(fā)過(guò)Servlet,就對(duì)@WebServlet不會(huì)陌生。 現(xiàn)在的開(kāi)發(fā)都推崇使用注解來(lái)進(jìn)行開(kāi)發(fā),這樣就可以免去寫(xiě)XM...

    FrozenMap 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<