注解分为三种,一般来讲我们使用的是运行时会加载及能够反射读取的注解类型,

其他编译器生效的类型和编译后放入类文件而运行期不能加载解析的对我们没啥用。

所以从普通理解上来看,注解要配合着反射用就好了。

java有很多依赖注入框架,比如Spring,这类注解框架是很强大的,它们通过在运行

时读取注解实现注入,依赖和注入都需要依靠Java的反射机制,反射对于性能敏感

的Android来说是一个硬伤,所以这类注入框架一般用于JavaEE开发。

不过在butterknife中,其注解保留为class,RetentionPolicy.class,依赖注入,用

的是APT(Annotation Process Tool)在编译时生成辅助类,这些类继承特定父类或

实现特定接口,程序运行时的开销可以忽略不计。

注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记。程序可以利用

java的反射机制来了解你的类及各种元素上有无何种标记,针对不同的标记,就去做

相应的事件。标记可以加在包,类,字段,方法,方法的参数以及局部变量上。

但凡Annotation起作用的场合都是有一个执行机制/调用者通过反射获得了这个元数据

然后根据它采取行动。

如果只有value属性!可以不写属性名和等于号,直接写值即可!

注解的作用:

1.生成文档。最常见的,java最早提供的注解,常用的有@see,@param,@return

2.跟踪代码依赖性,实现替代配置文件功能。注解配置。

3.在编译时进行格式检查。如@override放在方法前,如果这个方法不是覆盖了超类

方法,则编译时就能检查出。

注意在使用butterknife的时候,

在8.0版本,

需要添加apt工具,

在project的build文件添加,

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

在module的build文件的最上部添加,

apply plugin: 'com.neenbedankt.android-apt'

依赖dependencies那里需要填上,

compile 'com.jakewharton:butterknife:8.0.1'

apt 'com.jakewharton:butterknife-compiler:8.0.1'

这样才能通过编译,如果不添加apt的话。

@BindView(R.id.click1)

Button b1;

在下面直接使用的话,会出现null指针异常。

另外注意不能用private或者static

@BindViews({R.id.click2,R.id.click3})

Button[] b;// 这里需要用list或者array

在下面用的话,

b[0].setOnClickListener(new View.OnClickListener(){

@Override

public void onClick(View v) {

Toast.makeText(MainActivity.this,"点击了2",Toast.LENGTH_SHORT).show();

}

});

    b[1].setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"点击了3",Toast.LENGTH_SHORT).show();
}
});

@BindString(R.string.app2)

String app2;

绑定预设的字符串以及color、dimen,drawable等。可以节省大量代码的编写。

凡是跟view相关需要findViewById的都可以用这个,包括lists,

不过这里需要用到Action和Setter

还有监听绑定,甚至可以分组一起绑定。

在碎片中注意在onDestroyView中需要unbind方法中取消绑定,

这里在Unbinder中有解绑实例。

即使使用butterknife,也可以使用findById来找,可以减少代码

Annotation注解与butterknife的更多相关文章

  1. Java Annotation 注解

    java_notation.html div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin ...

  2. Hibernate的Annotation注解

    当项目变得比较大的时候,如何还使用hbm.xml文件来配置Hibernate实体就会变得比较复杂.这里Hibernate提供了Annotation注解方式,使得Hibernate的映射文件变得很方便管 ...

  3. Java基础笔记 – Annotation注解的介绍和使用 自定义注解

    Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 |  被围观 25,969 views+ 1.Anno ...

  4. paip.Java Annotation注解的作用and 使用

    paip.Java Annotation注解的作用and 使用 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog. ...

  5. hibernate annotation注解方式来处理映射关系

    在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方式 ...

  6. Android开发学习之路--Annotation注解简化view控件之初体验

    一般我们在写android Activity的时候总是会在onCreate方法中加上setContentView方法来加载layout,通过findViewById来实现控件的绑定,每次写这么多代码总 ...

  7. java EE中的hello1.java及Annotation(注解)

    一.Annotation(注解) 注解(Annotation)很重要,未来的开发模式都需要注解,注解是java.lang.annotation包,Annotation是从java5引入的,它提供一些不 ...

  8. Annotation(注解)介绍

    Annotation(注解)是什么: Annotation(注解) 官方的定义:    An annotation is a form of metadata, that can be added t ...

  9. Hibernate 零配置之Annotation注解

    JPA规范推荐使用Annotation来管理实体类与数据表之间的映射关系,从而避免同时维护两份文件(Java 实体类 和 XML 映射文件),将映射信息(写在Annotation中)与实体类集中在一起 ...

随机推荐

  1. ABA problem

    多线程及多进程编程同步时可能出现的问题,如果一个值被P1读取两次,两次的值相同,据此判断该值没有被修改过,但该值可能在两次读取之间被P2修改为另外一个value,并在P1再次读取之前修改回了原值.P1 ...

  2. java中动态代理

    一.在java中怎样实现动态代理 1.我们要有一个接口,还要有一个接口的实现类,而这个实现类呢就是我们要代理的对象 接口: package org.dynamicproxy.test; public ...

  3. struts2的action的知识点和利用action向页面注入值的操作

    1.      Action的顺序,会先搜索指定名字下的包的action,如果找不到会去搜索默认路径下的包下的action. 2.      如果没有给action设置值,那么action会有一些默认 ...

  4. 【M16】谨记80-20法则

    1.开始编写代码时,不要过多考虑效率,而应该首先考虑逻辑的清晰性和代码的可读性. 2.后期通过测试找到效率的瓶颈所在,而不是靠猜测.然后,针对性地去解决.也就是80%的时间去解决这20%的代码.

  5. mysql 找不到或无法加载已注册的 .Net Framework Data Provider

    需要安装 mysql-connector-net-6.7.4.msi 在C盘安装mysql的位置找到三个DLL,复制到Bin文件夹下 在C:\Windows\Microsoft.NET\Framewo ...

  6. Codeforces Round #115 A. Robot Bicorn Attack 暴力

    A. Robot Bicorn Attack Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/17 ...

  7. 在安卓开发中使用SQLite数据库操作实例

    前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLi ...

  8. 【ZZ】编程能力层次模型

    http://blog.csdn.net/shendl/article/details/43835421 前言 程序员的编程技能随着经验的积累,会逐步提高.我认为编程能力可以分为一些层次. 下面通过两 ...

  9. Ruby on Rails Tutorial 第四章 Rails背后的Ruby 之 类

    Ruby和其他面向对象的语言一样,使用类来组织方法,然后实例化类,创建对象.1.构造方法使用双引号是字符串的字面构造方法,也可以使用“具名构造方法”,即在类名上调用new方法 >> s=& ...

  10. debian的备份与还原

    不管是windows还是linux 备份都很重要 因为配好一个系统是要花很多时间的 出了问题的话 有备份直接还原就可以了 windows下有ghost 那么linux下呢?Linux可以在系统正在运行 ...