對於Android開發來講,註解但是個好東西,可是利用的很少,我研究過國內很多SDK,發現不多有使用註解的,至於App的開發團隊的使用狀況不太清楚,可是就我接觸的而言,使用的也很少。以前接觸過國外的一些SDK,好比facebook相關的一些SDK,你查看一下源碼,就會發現,註解是一個很廣泛的存在。javascript
若是你使用了com.android.support:appcompat-v7
庫不須要添加額外的依賴。
可是若是你沒有使用這個庫,也能夠額外單獨添加註解庫。compile 'com.android.support:support-annotations:xx.xx.xx'。
java
下面舉個例子:android
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
test1(null);
test2(null);
}
private void test1(@NonNull String str){
Log.e(this.getClass().getName(),str);
}
private void test2(@Nullable String str){
if (str!=null){
Log.e(this.getClass().getName(),str);
}
}
}複製代碼
將上面代碼放到IDE中,顯示效果以下:網絡
這樣,咱們能夠輕易發現錯誤,避免空指針的crash發生,養成在每一個方法中加註解的習慣,加強代碼的嚴謹性。app
資源類型的註解,有如下幾種:ide
這些註解在用法上都是同樣的,只是標識的類型不同(不一一介紹了,經過名字就能看出來),下面看一下用法:post
private void setText1(@StringRes int id){
}
private void setText2( int id){
}複製代碼
上面連個方法一個是帶資源註解的,一個是不帶的,咱們在IDE中調用一下,看有什麼區別:ui
IntDef StringDef能夠限制傳入參數的內容,這在一些固定參數的方法中尤其重要,好比網絡的get post方法:
好比:this
private static final int INTGET = 0;
private static final int INTPOST = 1;
private static final String STRGET = "get";
private static final String STRPOST = "post";複製代碼
而後使用IntDef StringDef定義註解接口spa
@IntDef({INTGET, INTPOST})
public @interface HttpMethod {
}
@StringDef({STRGET, STRPOST})
public @interface MethodName {
}
public void setMethod(@HttpMethod int httpmethod) {
}
public void setMethod(@MethodName String httpmethod) {
}複製代碼
這時偶們再調用setMethod方法,會有以下效果:
對於有些方法可能須要系統的一些權限,可是咱們會忘了在Manifest中加入這些權限,致使程序報錯。這時咱們就可使用權限註解:
@RequiresPermission(Manifest.permission.INTERNET)
private void getDataFromNet(){
}複製代碼
這時,若是沒有這個權限,而後去調用這個方法:
好比咱們寫一個基類:
public class Base {
@CallSuper
public void test(){
Log.e("","");
}
}複製代碼
這時若是咱們寫一個類,繼承這個類,若是不去super父類的方法就會這樣:
一看到這個詞確定第一反應就是跟混淆相關的,沒錯,這個就是標識該方法被keep出來,固然你也能夠在混淆文件中keep,混淆文件的規則能夠參考Android混淆機制
基本的註解就總結到這裏,使用註解,養成一個良好的代碼習慣,可使代碼更加嚴謹。