Java注解
2021-03-05 08:30
标签:method ide bool coder swa retention local str on() 保留期,当@Retention应用到一个注解上,说明了这个注解的存活时间。 作用:能够将注解中的元素包含到Javadoc中去 指定了注解运用的地方,被@Target注解的注解就被限定了运用的场景 继承,注解 Test 被 @Inherited 修饰,之后类 A 被 Test 注解,类 B 继承 A,类 B 也拥有 Test 这个注解。 可重复,注解的值可以同时取多个 AKA成员变量,注解只有成员变量,没有方法。 标记过时的元素 提示子类要复写父类中被@Override修饰的方法 组织警告,之前说过调用被 @Deprecated 注解的方法后,编译器会警告提醒,而有时候开发者会忽略这种警告,他们可以在调用的地方通过 @SuppressWarnings 达到目的。 函数式接口注解,函数式接口就是一个具有一个方法的普通接口 注解通过反射获取 Java注解 标签:method ide bool coder swa retention local str on() 原文地址:https://www.cnblogs.com/GladysJiu/p/14325736.htmlJava注解Annotation
元注解
@Retention
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {
}
@Documented
@Target
@Inherited
@Repeatable
@interface Persons {
Person[] value();
}
@Repeatable(Persons.class)//@Repeatable后面括号中的类相当于一个容器注解,即用于存放其他注解的地方,本身也是注解
@interface Person{
String role default "";
}
@Person(role="artist")
@Person(role="coder")
@Person(role="PM")
public class SuperMan{
}
//Persons 是一张总的标签,上面贴满了 Person 这种同类型但内容不一样的标签。把 Persons 给一个 SuperMan 贴上,相当于同时给他贴了程序员、产品经理、画家的标签。
注解的属性
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {
int id();
String msg();
}
//定义了TestAnnotation这个注解中两个属性
//赋值方式
@TestAnnotation(id=3,msg="hello annotation")
public class Test {
}
//如果一个注解没有任何属性
public @interface Perform{}
//在应用这个注解的时候,括号都可以省略
@Perform
Public void testMethod(){}
Java预置的注解
@Deprecated
@Override
@SuppressWarnings
@FunctionalInterface
@FunctionalInterface
public interface Runnable{
public abstrct void run();
}
注解与反射
@TestAnnotation()
public class Test {
public static void main(String[] args) {
//首先可以通过 Class 对象的 isAnnotationPresent() 方法判断它是否应用了某个注解
boolean hasAnnotation = Test.class.isAnnotationPresent(TestAnnotation.class);
if ( hasAnnotation ) {
//然后通过 getAnnotation() 方法来获取 Annotation 对象。
TestAnnotation testAnnotation = Test.class.getAnnotation(TestAnnotation.class);
System.out.println("id:"+testAnnotation.id());//返回指定类型的注解
System.out.println("msg:"+testAnnotation.msg());
}
}
总结