一、简单介绍
啥是注解。不懂的能够先看我上一篇文章。
在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 {
@Override
protected 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 {
@Override
protected 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();
-
相关阅读:
新浪SAE搭建项目
PHP ReflectionClass
自定义时间函数
mysql 日期函数
jquery之商城菜单
jquery之行自加自减
前端之拖动面板
商城轮播图
js之返回网页顶部
js之搜索框
-
原文地址:https://www.cnblogs.com/yangykaifa/p/7384011.html