常见注解:
@Override
public String toString() {
return super.toString();
}
@FunctionalInterface
public interface Runnable {
public abstract void run();
}
@Deprecated
public final void stop() {}
注解的使用:
当使用了Override注解后,就必须是重写父类的方法,否者就报错。
当使用了 Deprecated 注解,就会将该方法标志位一条删除线(表示不推荐使用了,但是你强行使用也不会报错)
没加注解前
加了注解后,自动提示的警告就会消失(不建议使用)
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
ElementType[] value(); // 参数就是下面的枚举数据
}
public enum ElementType {
TYPE,
FIELD,
METHOD,
PARAMETER,
CONSTRUCTOR,
LOCAL_VARIABLE,
ANNOTATION_TYPE,
PACKAGE,
TYPE_PARAMETER,
TYPE_USE
}
作用:表示一个注解可以使用的返回(作用域)
METHOD 就说明智能在一个方法上使用
测试:
注解在方法上就可以,测试在类上
爆红了,说明不可以写在类上---添加作用域
加上TYPE属性,就没有报错了
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention { // 作用是,注解在哪些时间段可以生效
RetentionPolicy value();
}
public enum RetentionPolicy { // 参数对应的枚举数据
SOURCE,
CLASS,
RUNTIME // 使用最多
}
作用域比较: RUNTIME>CLASS>SOURCE
@Target(value = {ElementType.METHOD, ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME )
@interface MyAnnotation{
}
表示是否将我们的注解生成在javadoc中
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {
} // 没有参数,直接使用即可
子类可以继承父类的注解
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Inherited {
} // 没有参数
上面可以加元注解(可多选)
@interface 注解名{
// 中间写参数
}
@Target(value = {ElementType.METHOD, ElementType.TYPE})
@interface MyAnnotation{
}
参数定义格式:
参数类型 参数名称();
使用:
没写参数直接报错
这样就不报错了
String name() default ""; // 定义格式 后面加上default 后面根上默认值
没参数也不报错,因为有了默认值
String value(); // 当参数名称为value时,在使用时可以不写参数名称
@Target(value = {ElementType.METHOD, ElementType.TYPE})
@interface MyAnnotation{
String value();
int age();
String[] test() default {};
}
使用测试:
@MyAnnotation(value = "怀旧", age = 18)
public class Test2{
public static void main(String[] args) {
}
}
@Target(value = {ElementType.METHOD, ElementType.TYPE})
@interface MyAnnotation{
String value();
int age();
String[] test() default {};
}
这边写法没报错,原因value的参数可以不写名称,然后给age进行了赋值,最后的test有默认参数,可以不用赋值。
正常情况,参数不会这么多,最多用1~2个
评论
登录后才可以进行评论哦!