详解Java注解知识点
作者:香菜聊游戏 发布时间:2021-06-24 18:39:12
一、注解是什么
Java 注解用于为 Java 代码提供元数据,看完这句话也许你还是一脸懵逼,用人话说就是注解不直接影响你的代码执行,仅提供信息。接下我将从注解的定义、元注解、注解属性、自定义注解、注解解析JDK 提供的注解这几个方面再次了解注解(Annotation)
二、jdk支持的注解有哪些
2.1 三种常用的注解:
@SuppressWarnings 该注解的作用是阻止编译器发出某些警告信息。它可以有以下参数:
deprecation :过时的类或方法警告。
unchecked:执行了未检查的转换时警告。
allthrough:当Switch程序块直接通往下一种情况而没有Break时的警告。
path:在类路径、源文件路径等中有不存在的路径时的警告。
serial:当在可序列化的类上缺少serialVersionUID定义时的警告。
finally:任何finally子句不能完成时的警告。
all:关于以上所有情况的警告
@Deprecated 该注解的作用是标记某个过时的类或方法。
@Override 该注解用在方法前面,用来标识该方法是重写父类的某个方法。
2.2 元注解
元注解主要是用来注解自定义注解的注解,分别有@Retention、 @Target、 @Document、 @Inherited和@Repeatable(JDK1.8加入)五种。
下面讲两个平常最常用的注解:
@Retention 注解的生命周期,主要有
RetentionPolicy.SOURCE 仅存在于源码中
RetentionPolicy.CLASS 默认的策略,在class字节码文件中存在,但运行时无法获得
RetentionPolicy.RUNTIME 在运行时可以通过反射获取到,也是最常用的。
@Target 注解的作用目标,主要有
ElementType.TYPE 作用接口、类、枚举、注解
ElementType.FIELD 作用属性字段、枚举的常量
ElementType.METHOD 作用方法
ElementType.PARAMETER 作用方法参数
ElementType.CONSTRUCTOR 作用构造函数
ElementType.LOCAL_VARIABLE 作用局部变量
ElementType.ANNOTATION_TYPE 作用于注解(@Retention注解中就使用该属性)
ElementType.PACKAGE 作用于包
ElementType.TYPE_PARAMETER 作用于类型泛型,即泛型方法、泛型类、泛型接口 (jdk1.8加入)
三、注解实例
在枚举中编译器只会限制枚举的名字不能重复,在开发中经常会遇到枚举Id 重复的问题,因为每个人在开发功能的时候一般只会专注于自己的功能,做完只会直接提交代码,不会注意到枚举Id冲突,这个时候可以使用下面的代码进行枚举自检,在项目的开发阶段就能及时发现代码的问题。下面的代码稍微修改下就可以在项目中使用,拿走不写。
1、自定义注解
检测枚举的key 是否有重复
package org.pdool.anno;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author 香菜
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CheckEnum {
}
2、在对应的方法上增加注解
package org.pdool.anno;
/**
* 资源枚举类
* @author 香菜
*/
public enum ResType {
GOLD(1),
DIAMOND(2),
//注意:此处重复
SILVER(2);
int type;
@CheckEnum
public int getType() {
return type;
}
ResType(int type) {
this.type = type;
}
}
3、在项目启动的时候检查注解的枚举
package org.pdool.anno;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Set;
/**
* @author 香菜
*/
public class Aain {
public static void main(String[] args) throws InvocationTargetException,IllegalAccessException {
// 获取有注解的方法
Method[] declaredMethods = ResType.class.getDeclaredMethods();
Method annoMethod = null;
for (Method declaredMethod : declaredMethods) {
CheckEnum annotation = declaredMethod.getAnnotation(CheckEnum.class);
if (annotation != null){
annoMethod = declaredMethod;
break;
}
}
Set<Object> set = new HashSet<>();
// 遍历每个枚举的id
Object[] oo = ResType.class.getEnumConstants();
for (Object o : oo) {
Object invoke = annoMethod.invoke(o);
if (!set.contains(invoke)){
set.add(invoke);
}else {
System.out.println("重复的key "+ o +" -- "+ invoke);
}
}
}
}
注:上面的代码只是简单的实例,只是为了展示核心代码,在项目中使用时可以修改类的获取为扫描项目下的包,遍历所有的枚举,就可以在项目中使用了。
四、总结
注解虽然不影响代码的运行,但是可以为运行中的程序提供更多的信息,注解也是很多框架的基本技术切入点,比如Spring 的注解,Lombok 的各种注解,都是使用了注解做了很多事,明白了注解是怎么回事,理解框架也会轻而易举。
来源:https://blog.csdn.net/perfect2011/article/details/116278395


猜你喜欢
- 最近要给一个 Winform 项目添加功能,需要一个能显示进度条的弹窗,还要求能够中止任务,所以就做了一个,在此做个记录总结。虽然用的是比较
- 一、项目简述功能包括: 该系统不错分为学生,教师,管理员,教导主任四种角 色,包括学生管理,教师管理,学生选题,教师选题,主 任审核,管理员
- 1. 你知道volatile是如何保证可见性吗?我们先看一组代码:public class VolatileVisibleDemo { &n
- 首先,引入依赖:<dependency> <groupId>org.springframe
- 水流波动的波形都是三角波,曲线是正余弦曲线,但是Android中没有提供绘制正余弦曲线的API,好在Pa
- 本文实例为大家分享了Java实现坦克大战小游戏的具体代码,供大家参考,具体内容如下创作背景:n年前的学期末课题设计,从b站上学的,一个代码一
- 线程安全解决方案synchronized,ReentrantLock,Atomic 使用场景描述在实际开发过程中如果服务量,请求频繁,就会经
- JAVA接口的概念官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不
- 判断参数是否为空并作为查询条件@Override public Page<DemandEntity>
- spring配置不扫描service层原因我将contoller给springmvc进行扫描,然后其余所有交给spring扫描然后发现ser
- IOS与网页JS交互随着移动APP的快速迭代开发趋势,越来越多的APP中嵌入了html网页,但在一些大中型APP中,尤其是电商类
- 一、案例一//XML文件写方法 //编写XML文件的格式并存储到指定的FilePath
- 平时我们编写WinForm程序经常使用VS进行拖控件的方式,这样做虽然简单,但是无法深入了解WinForm程序的本质。其实,用记事本也可以编
- 大家可以自行百度下阿里分布式事务,在这里我就不啰嗦了。下面是阿里分布式事务开源框架的一些资料,本文是springboot+dubbo+fes
- 使用foreach循环的坑我们首先看一段MyBatis中使用foreach循环的sql:SELECT * FROM table where
- 最近在研究JSON,Java中有很多处理JSON的类库,lib-json、sf-json、fastjson还有Jackson Json。第一
- 我们知道,spring boot自动配置功能可以根据不同情况来决定spring配置应该用哪个,不应该用哪个,举个例子:Spring的Jdbc
- 本期文章源码:GitHub一文彻底搞懂《并查集》!概念并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题(即所谓的并、查)。
- 本文实例实现一个如下图所示的Android自定义控件,可以直观地展示某个球队在某个赛季的积分数和胜场、负场、平局数首先对画布进行区域划分,整
- 本文实例为大家分享了SpringMVC使用MultipartFile实现文件上传的具体代码,供大家参考,具体内容如下一、配置文件Spring