注解的作用:
1.提供编译信息,比如挂起警告,检测错误。
2.编译、部署时的处理,比如生成代码、xml等。
3.运行时处理,比如提供运行时的检查。
除了修饰类和方法,注解还可以用在何处(JDK8以上):
1.类实例创建表达式 - new @Interned MyObject() ;
2.类型转换 - myString = (@NonNull String) str ;
3.接口实现声明 - class UnmodifiableList implements @Readonly List<@Readonly T> { ... }
4.异常声明 - void monitorTemperature() throws @Critical TemperatureException { ... }
声明一个注解类型:
假设源码中每个类都需要写上作者日期等注释,如下
public class Generation3List extends Generation2List {
// Author: John Doe
// Date: 3/17/2002
// Current revision: 6
// Last modified: 4/12/2004
// By: Jane Doe
// Reviewers: Alice, Bill, Cindy
// class code goes here
}
可以用注解为这个类添加作者日期等元数据,语法如下
@Retention(RetentionPolicy.RUNTIME) //如果希望用反射获取注解信息,必须用RUNTIME修饰
@Documented //如果希望@CodeMeta出现在生成的javadoc里,需要在此加上@Documented.
@interface CodeMeta{
String author();
String date();
int currentRevision() default 1;
String lastModified() default "N/A";
String lastModifiedBy() default "N/A";
// Note use of array
String[] reviewers();
}
使用这个注解
@CodeMeta(
author="tonglei",
date="2016/08/15",
currentRevision=3,
lastModified="2016/08/13",
reviewers={"zhangixa","yangdinghuan"}
)
private static class TestType{
public static void main(String[] args) {
CodeMeta meta = TestType.class.getAnnotation(CodeMeta.class);
System.out.println(meta.author());
}
}
jdk预定义的注解:
(java代码使用的注解)
1.Deprecated
2.Override
3.SuppressWarnings - 挂起警告,("deprecation" ,"unchecked")
4.SafeVarargs - 表示该方法在使用varargs时无潜在危险
5.FunctionalInterface - JDK8引入
(用于注解的注解)
6.Retention - 指示注解如何存储
1) RetentionPolicy.SOURCE - 仅存在于源码中,编译器无视之
2) RetentionPolicy.CLASS - 存在于编译后的class文件中,但是jvm无视之
3) RetentionPolicy.RUNTIME - 存在于编译后的class文件中,被jvm识别
7. Documented
8. Target - 限制该注解能用作用的java类型
1) ElementType.ANNOTATION_TYPE can be applied to an annotation type.
2) ElementType.CONSTRUCTOR can be applied to a constructor.
3) ElementType.FIELD can be applied to a field or property.
4) ElementType.LOCAL_VARIABLE can be applied to a local variable.
5) ElementType.METHOD can be applied to a method-level annotation.
6) ElementType.PACKAGE can be applied to a package declaration.
7) ElementType.PARAMETER can be applied to the parameters of a method.
8) ElementType.TYPE can be applied to any element of a class.
9. Inherited - 指示该注解可以是从其他超类继承而来
10. Repeatable - 该注解可以在同一个地方重复使用,JDK8才引入
阅读(390) | 评论(0) | 转发(0) |