Android AOP之路三 Android上的注解
一、簡單介紹
啥是注解。不懂的能夠先看我上一篇文章。
在android 里面 注解主要用來干這么幾件事:
和編譯器一起給你一些提示警告信息。
配合一些ide 能夠更加方便快捷 安全有效的編寫java代碼。
谷歌出的support-annotations這個庫 就是主要干這個的。
和反射一起 提供一些相似于spring 可配置的功能,方便簡潔。
二、Support Annotations栗子
這里使用官方的一個庫,說明在開發中的簡單一個應用。
2.1 導包
在新建項目的時候會自己主動導的,能夠看build.gradle中的依賴dependencies是這種。
dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {exclude group: 'com.android.support', module: 'support-annotations'})compile 'com.android.support:appcompat-v7:25.1.1'testCompile 'junit:junit:4.12' }假設沒有的話,自己在build.gradle的依賴加入(xx.x.x為你的compileSdkVersion版本):
compile 'com.android.support:support-annotations:xx.x.x'2.2 使用
這時候就能夠使用一些support-annotations提供的注解,以下舉一些栗子:
1、 @NonNull
test方法參數加入了一個NonNull注解,然后我們傳遞一個空的參數過去。
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);String s = null;test(s);}public void test(@NonNull String s){System.out.println(s);}}IDE就會提示警告
2、 @StringRes
再定義testString方法參數加入了一個StringRes注解,然后我們傳遞一個數字過去。
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);testString(112312);testString(R.string.app_name);}public void testString(@StringRes int s){System.out.println(s);}}IDE就會提示
三、實現自己的ButterKnife
經過之前的知識,我們已經知道注解的原理和使用了,這里實現ButterKnife的一個簡單功能,View的注入: 一個注解,一個解析器就可以。
3.1 BindView注解
@Target(ElementType.FIELD) //解析常量 @Retention(RetentionPolicy.RUNTIME) //執行時 public @interface BindView {int value() default -1; //標識控件 }3.2 BindViewParser解析器
/*** Created by Litp on 2017/2/17.*/ public class BindViewParser {/*** 傳遞activty或者View 對象,使用反射獲取view變量* @param object*/public static void inject(Object object) {try {parse(object);} catch (Exception e) {e.printStackTrace();}}/*** 解析獲取值* @param object* @throws Exception*/public static void parse(Object object) throws Exception {final Class<?> clazz = object.getClass(); View view = null; //獲取clazz的變量。不論private還是public Field[] fields = clazz.getDeclaredFields();
posted @ 2017-08-17 19:38 yangykaifa 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/yangykaifa/p/7384011.html
總結
以上是生活随笔為你收集整理的Android AOP之路三 Android上的注解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vim-安装 YouCompleteMe
- 下一篇: Android 日夜间切换Demo