理解注解前先了解几个概念
枚举:https://blog.csdn.net/moakun/article/details/80554066
注解的概念
注解(Annotation),也叫元数据(Metadata),是Java5的新特性,JDK5引入了Metadata很容易的就能够调用Annotations。注解与类、接口、枚举在同一个层次,并可以应用于包、类型、构造方法、方法、成员变量、参数、本地变量的声明中,用来对这些元素进行说明注释。
参考:https://blog.csdn.net/github_35180164/article/details/52107204
看完之后,理解
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = { ElementType.ANNOTATION_TYPE } )
public @interface Target {
ElementType[] value();
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
ElementType[] value();
}
ButterKnife的实现
两个jar包
implementation 'com.jakewharton:butterknife:10.1.0'
implementation 'com.jakewharton:butterknife-compiler:10.1.0'
参考:https://blog.csdn.net/github_35180164/article/details/52208691
ButterKnife的大名相信做Android开发的都应该知道,如果你还不知道那只能说明你平时都没关注过开源项目,优秀的开源项目对于开发来说帮助是巨大的,而学习优秀的开源项目对个人的提升帮助也是巨大的。ButterKnife通过注解的方式帮助我们处理诸如 findViewById()和setonclicktListener()等的重复性繁琐的工作,极大地减轻了程序员的工作量。ButterKnife的实现原理是通过定义编译时注解(RetentionPolicy.CLASS),并在注解处理器中对这些注解进行处理,最终生成 java代码,我们只要简单地调用个bind() 方法就可以完成所有工作,非常的方便。而且它用的是编译时注解,和运行时注解相比对性能的影响是很小的。
继续理解:
https://blog.csdn.net/qq_36946446/article/details/83542314
class ExampleActivity extends Activity {
@BindView(R.id.title) TextView title;
@BindView(R.id.subtitle) TextView subtitle;
@BindView(R.id.footer) TextView footer;
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.bind(this);
}
}
等于
public void bind(ExampleActivity activity) {
activity.subtitle = (TextView) activity.findViewById(R.id.subtitle);
activity.footer = (TextView) activity.findViewById(R.id.footer);
activity.title = (extView) activity.findViewById(R.id.title);
}
```jar包插入
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190412074226729.png)
自定义学习
/**
- 编译时注解
*/
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.TYPE)
public @interface MyAnnotation {
String value();
}