在了解自定義注解前,我們需要搞懂元注解的概念,這個在總結(jié)篇中已經(jīng)說明溅固。
0FgBFBce9h.png
這里再提一下@Target的參數(shù)
ElementType | 含義 |
---|---|
ANNOTATION_TYPE | 注解類型聲明 |
CONSTRUCTOR | 構(gòu)造方法聲明 |
FIELD | 字段聲明(包括枚舉常量) |
LOCAL_VARIABLE | 局部變量聲明 |
METHOD | 方法聲明 |
PACKAGE | 包聲明 |
PARAMETER | 參數(shù)聲明 |
TYPE | 類、接口(包括注解類型)或枚舉聲明 |
我們添加如下注解定義:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface FTC300_RUNTIME {
String value();
}
然后綁定Activity兰珍,并賦值給注解屬性注解的值 侍郭。
這里我們需要了解 Class 類以及了解 java.lang.reflect.* , 不難理解,具體這邊就不多介紹了
public static <T extends Activity> void bindRuntimeField(T activity){
Field fields[] = activity.getClass().getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(FTC300_RUNTIME.class)) {
FTC300_RUNTIME ftc300_runtime = field.getAnnotation(FTC300_RUNTIME.class);
try {
field.setAccessible(true);
field.set(activity,ftc300_runtime.value());
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
最后在Activity中調(diào)用
@FTC300_RUNTIME("ftc300_runtime")
String ftcRuntime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bindRuntimeField(this);
Log.d("MainActivity",TextUtils.concat(“FtcSource:",ftcRuntime).toString());
}
然后就能看到輸出了。
這個比較基礎的反射知識亮元,但是這樣真的好嗎猛计?下篇文章中也有闡述。