前言
注解在Java SE5中引入。注解好处多多,TA可以使我们的代码变得简洁,减少样板代码,还能存储有关程序的额外信息。程序员还可以自定义注解
// @Override为注解
@Override
public String toString() {
return "ConferencePaper:" + getTitle();
}
Java内置注解
@Override
// 表示被注解的方法为重写的父类方法@Deprecated
// 表示被注解的元素已被废弃,不推荐使用@SuppressWarnings
// 压制不当的警告
元注解
用来自定义注解
-
@Target
表示注解用于什么
可选参数(
ElementType
类型):CONSTRUCTOR
FIELD
LOCAL_VARABLE
METHOD
PACKAGE
PATAMETER
TYPE
-
Retention
表示注解保存到什么级别
可选参数(
RetentionPolicy
类型):SOURCE
CLASS
// 在.class
文件中可用,但运行时不会加载到虚拟机RUNTIME
-
Documented
将此注解包含在Javadoc中
-
Inherited
允许子类继承父类中的注解
自定义注解
使用上面的元注解来自定义注解
标记注解
// 自定义注解示例
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
}
使用@interface
关键字来表明Test
是一个注解,像这样的注解中没有任何元素的称为标记注解。
带元素的注解
// 带元素的注解示例
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UseCase {
int id();
String description() default "no description";
}
使用时
@UseCase(id = 19)
public void checkId() {
}
@UseCase(id = 19, description = "for checking name")
public boolean checkName() {
return false;
}
@UseCase(description = "for checking age", id = 20)
public boolean checkAge() {
return false;
}
如上所示,使用id=19
这样传值,顺序任意。可见设置了default
值的可省略传值,使用默认值。
注解元素
- 所有基本类型(int,float,boolean,byte,double,char,long,short)
- String
- Class
- enum
- Annotation
- 上述类型的数组
处理自定义注解
如果没有用来读取注解的工具,那注解也不会比注释更有用。
处理注解就需要我们编写注解处理类,用到了上一篇文章讲到的反射
2019-10-18 20:46:01