java.lang和java.lang.annotation中实现Annotation的类小结
来源:互联网 发布:javascript删除属性 编辑:程序博客网 时间:2024/06/05 16:35
加了注解,等于打上了某种标记,没加,则等于没有某种标记,以后,其他程序可以用反射来了解你的类上面有无何种标记,看你有什么标记,就去干相应的事。标记可以加在类,方法,字段,包上,方法的参数上。
(1) Java.lang中最基本的Annotation有 @Deprecated, @Override, @SuppressWarnings三种;其中@Deprecated表示过时或者抛弃不用的element,因为有更好的可以替代或者是原element的使用存在一定危险;
@Override声明了一个方法打算重写父类的方法;利用@Override很多时候可以检测手动重写的方法是否正确;
@SuppressWarnings指示在注释元素以及包含在该注释元素中的所有程序元素中取消显示指定的编译器警告。
针对类的注释,可以用反射Class.isAnnotationPresent(Class<? Extends Annotation> annotationClass)来检测在某个类上是否存在指定的注释类;
针对方法的注释,也可以用反射Class.getMethod. isAnnotationPresent(Class<? Extends Annotation> annotationClass)来检测指定方法上是否存在指定的注释类;
(2)Java.lang.annotation中的接口有以下:
Documented:某一类型的注释被javadoc或者某种类似的工具进行文档化
Inherited:指示注释类型被自动继承
Retention:指示注释类型将会保留多久;其默认值为RetentionPolicy.CLASS(编译器将把注释记录在类文件中,但在运行时VM不需要保留注释。);它还可以取值为RetentionPolicy.SOURCE(编译器要丢弃的注释。)和RetentionPolicy.RUNTIME(编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。)。其中@Override和@SuppressWarnings是RetentionPolicy.SOURCE级别的;@Deprecated是RetentionPolicy.RUNTIME级别的
Target:指示注释类型适用的程序元素的种类;其ElementType的取值可以是ANNOTATION_TYPE(注释类型声明),CONSTRUCTOR(构造器声明),FIELD(属性声明),TYPE等;例如:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
(3)定义自己的MyAnnotation,为MyAnnotation类增加参数,并为参数添加默认值:
public String color() default "green";
public int[] array() default {1,2};
public String value() default "java";
public MetaAnnotation annotation() default @MetaAnnotation("miracle");//有个注释类名为MetaAnnotation;其参数增加也如上所示;由@MetaAnnotation定义default值的方式可知,在@MetaAnnotation类中需要设置的属性值为Value。
如果注解中有一个名称为value的属性,并且其他属性都采用默认值,且只想设置value属性,那么,在使用时可以省略value=,例如:
@MyAnnotation("javaweb")
参数为注解的情况:@MyAnnotation(value="red",annotation=@MetaAnnotation("samuel"))用反射的方法了解User类上是否有注解,什么注解的方法如下,注意数组Annotation的输出方式:
if (User.class.isAnnotationPresent(MyAnnotation.class)){
MyAnnotation myAnnotation = User.class.getAnnotation(MyAnnotation.class);
System.out.println(myAnnotation.color());
System.out.println(Arrays.toString(myAnnotation.array()));
System.out.println(myAnnotation.value());
MetaAnnotation ma = myAnnotation.annotation();
System.out.println(ma.value());
}
- java.lang和java.lang.annotation中实现Annotation的类小结
- java.lang和java.lang.annotation中实现Annotation的类小结
- JAVA Annotation(注解):java.lang.annotation
- java注解应用-java.lang.annotation
- 理解Java注解(java.lang.annotation)
- java.lang.annotation 注解 包分析 自定义annotation
- spring java.lang.ClassNotFoundException: java.lang.annotation.Repeatable
- java错误-java.lang.ClassNotFoundException: org.aspectj.lang.annotation.Around
- java错误-java.lang.ClassNotFoundException: org.aspectj.lang.annotation.Around
- java.lang.annotation-jdk的注解原理与使用
- Caused by: java.lang.ClassNotFoundException: org.aspectj.lang.annotation.Around
- Causedby:java.lang.ClassNotFoundException:org.aspectj.lang.annotation.Around
- Caused by: java.lang.ClassNotFoundException: org.aspectj.lang.annotation.Around
- java.lang.ClassNotFoundException: org.aspectj.lang.annotation.Around
- java. lang.ClassNotFoundException:org.aspectj.lang.annotation.Around
- java.lang.NoClassDefFoundError: javax.annotation.meta.When.class
- java.lang.IllegalArgumentException: @EnableAsync annotation metadata was not injected
- java.lang.UnsupportedClassVersionError: org/eclipse/jetty/util/annotation/ManagedObject : Unsupporte
- cocos-2d
- Android_标题栏
- solaris上VNC安装
- wp7资源流读取内容资源
- C语言中史上最愚蠢的Bug
- java.lang和java.lang.annotation中实现Annotation的类小结
- PDCA循环,问题跟踪
- 【就你不知道-Java 冒泡==你是不是高富帅】
- 两种sql写法 有区别吗
- 为无LIB的DLL制作LIB函数符号输入库
- QPushButton去掉虚线框(焦点框)
- Hibernate之SIUD
- linux /boot目录
- 社会给予我们一种责任和使命