玩转Java注解:元注解、内置注解、自定义注解的原理和实现
阅读本文大概需要 4 分钟。
来自:www.jianshu.com/p/ddd0b880641a
前言
我觉得注解可以分为三个部分来讲:内置注解,元注解,自定义注解。
一、内置注解
1、@Override 重写
//这个extends 不要在意,我写上去只是为了更加方便直观的去理解,Object是万物之源,不写也会默认是其子类,不用解释过多吧?
public class Annotation1 extends Object{
@Override
public String toString (){
return "我是重新定义过的toString方法";
}
}
2、@Deprecated 过期警告
public class Annotation1 extends Object{
public static void main(String[] args) {
testDeprecated.toString1();
}
}
class testDeprecated {
@Deprecated
public static String toString1(){
return "我是重新定义过的toString方法";
}
}
3、@SuppressWarnings 忽略警告
public class Annotation1 extends Object{
public static void main(String[] args) {
}
@SuppressWarnings("all")
public static void testSuppressWarnings(){
System.out.println("测试+testSuppressWarnings忽略警告!");
}
}
二、元注解
1、@Retention 作用域-(常用)
SOURCE:源代码时有用。
CLASS:class文件中有用,但会被jvm丢弃。
RUNTIME:运行时有用。
关系:RUNTIME>CLASS>SOURCE
2、@Documented 作用文档
RetentionPolicy.RUNTIME
,运行时有用!这个只是用来作为标记,了解即可,在实际运行后会将该注解写入javadoc中,方便查看。3、@Target 目标-(常用)
@Target(ElementType.TYPE)
——接口、类、枚举、注解@Target(ElementType.FIELD)
——字段、枚举的常量@Target(ElementType.METHOD)
——方法@Target(ElementType.PARAMETER)
——方法参数@Target(ElementType.CONSTRUCTOR)
——构造函数@Target(ElementType.LOCAL_VARIABLE)
——局部变量@Target(ElementType.ANNOTATION_TYPE)
——注解@Target(ElementType.PACKAGE)
——包
4、@Inherited 继承
5、新注解-(了解即可)
@SafeVarargs
- Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。@FunctionalInterface
- Java 8 开始支持,标识一个匿名函数或函数式接口。@Repeatable
- Java 8 开始支持,标识某注解可以在同一个声明上使用多次。
三、自定义注解
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = ElementType.METHOD)
@Inherited
@interface myAnnotation {
String name() default "";
int age() default 18;
String like();
String IDCard() default "";
}
总结
Spring Boot官宣:正式弃用 Java 8,最低要 Java 17!
内容包含Java基础、JavaWeb、MySQL性能优化、JVM、锁、百万并发、消息队列、高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper、数据结构、限流熔断降级......等技术栈!
⬇戳阅读原文领取! 朕已阅