Java Annotation注解
来源:互联网 发布:用阿里云gpu挖比特币 编辑:程序博客网 时间:2024/05/18 17:43
参考:Java官方文档http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.6
一、注解类型:
是一种特殊类型的interface,区别在于注解声明是 @interface
二、示例:(Android 框架一般怎么用注解省代码的)
1.注解的声明
@Retention(RetentionPolicy.RUNTIME)public @interface TestAnno {public int viewId();}
2.注解的使用
public class MainActivity extends Activity { @TestAnno(viewId = R.id.view)private View view; @Overrideprotected void onCreate(Bundle savedInstanceState) {AnnoUtil.assignView(this); }}
3.代码中使用注解信息(就是框架里常做的)
public class AnnoUtil{public static void assignView(Activity context){Field[] fields = context.getClass().getDeclaredFields();for (Field field : fields) {TestAnno anno = field.getAnnotation(TestAnno.class);if (anno != null) {//为了访问private常量,需要取消 读取检查field.setAccessible(true);try {field.set(context, context.findViewById(anno.viewId()));} catch (IllegalArgumentException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}}}}
(一般框架就是这么搞的了,这样也确实挺省代码的)
三、特点:
1.java的注解不可显式声明父类(实际上他们都继承了Annotation类,但是你在声明时无法使用extends 关键字),也无法被泛化。
2.方法:
a) 每个方法都定义了该注解中的一个元素(Each method declaration in an annotation type declaration defines an element of the annotation type)。
(擦!不看文档我一直以为注解没有方法,因为他用方法名称赋值比如 @
b) 注解中的方法形参不可以有参数
c) 注解中的方法不可以抛出异常
d)方法的返回值(即注解的element)必须是如下之一: a primitive type(基础类型:int、float等), String
, Class
, parameterized invocation of Class
, enum, annotation,array
(parameterized invocation of Class
:在java 5后java.lang.Class为泛型类,意味着他可以有类型参数,具体指Class<...>的形式,举例: Class<? extends Formatter> value();)
e)如果方法的声明中没有加 default 关键字,则必须在使用泛型是进行赋值
d) 如果想建立框架,在运行期间通过反射调用注解,需要你的注解加上注解@Retention(RetentionPolicy.RUNTIME),否则注解可能在编译期间就消除了。
3.如无特殊声明,注解和interface一样(都是静态的字段)
- 【Java】【Annotation】Java Annotation (注解)
- JAVA Annotation 注解
- JAVA 注解(annotation)
- Java Annotation(注解)
- 11.Java注解(Annotation)
- java注解(Annotation)
- java注解Annotation
- java 注解(Annotation)
- Java注解Annotation
- Java Annotation 注解
- JAVA注解 Annotation
- Java注解Annotation详解
- Java注解Annotation详解
- java 注解Annotation
- java Annotation 注解
- java 注解(annotation)
- Java 注解(Annotation)
- JAVA 注解(Annotation)
- UVa 131 有超能力的纸牌玩家
- 穿透内网,连接动态ip,内网ip打洞-----p2p实现原理
- objective-c 内存管理1
- ios面试问题——oc是动态运行时语言是什么意思
- 防止程序被多次重复调用的代码
- Java Annotation注解
- Hibernate中 多对一,一对多映射关系分析详解
- 对于I/O流的理解
- 番茄助手vaassist常见用法
- 杭电---2067 小兔的棋盘
- PHP 5.3 存在的两个奇怪的错误,盼高手解答!
- 程序员必读书单
- poj 3026 bfs+mst(消灭外星人)
- 产品经理写需求需要注意些什么?