Java基础 --- 注解 Annotation
Java基础 --- 注解 Annotation
- Java注解
- Java自带的标准注解
- 自定义注解
Java注解
- Java注解它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。
Java自带的标准注解
- @Override: 限定重写父类方法, 该注解只能用于方法
- @Deprecated: 用于表示某个程序元素(类, 方法等)已过时
- @SuppressWaring: 作用是屏蔽一些无关紧要的警告。使开发者能看到一些他们真正关心的警告。从而提高开发者的效率
- @SuppressWarnings(“unchecked”)
告诉编译器忽略 unchecked 警告信息,如使用List,ArrayList等未进行参数化产生的警告信息。- @SuppressWarnings(“serial”)
如果编译器出现这样的警告信息:The serializable class WmailCalendar does not declare a static final serialVersionUID field of type long,使用这个注释将警告信息去掉。- @SuppressWarnings(“deprecation”)
如果使用了使用@Deprecated注释的方法,编译器将出现警告信息。使用这个注释将警告信息去掉
自定义注解
元注解: 自定义注解时需要元注解
- @Retention
用来定义该注解在哪一个阶段可用,包括 在源代码中(RetentionPolicy.SOURCE
)、类文件中(RetentionPolicy.CLASS
)或者运行时(RetentionPolicy.RUNTIME
)- @Documented
生成文档信息的时候保留注解,对类作辅助说明- @Target:
注解可以修饰什么
- @ Inherited
说明子类可以继承父类中的该注解. 如果某个类使用了被@Inherited 修饰的Annotation, 则其子类将自动具有该注解
构建自定义注解
- 定义一个注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface IDAuthenticator {//属性类型, 属性名称, 默认值int length() default 8;
}
- 构建注解解析
public void check(Student student) throws IllegalAccessException {//使用Java反射得到属性for(Field field:student.getClass().getDeclaredFields()){//如果属性被IDAuthenticator修饰if(field.isAnnotationPresent(IDAuthenticator.class)){//拿到IDAuthenticator 对象IDAuthenticator idAuthenticator = field.getAnnotation(IDAuthenticator.class);field.setAccessible(true);//拿到student类中对应的属性, 也就是id属性Object value=field.get(student);//判断属性长度if(value instanceof String){String id=(String) value;//idAuthenticator.length()就是注解中的属性参数if(id.length()!=idAuthenticator.length()){throw new IllegalArgumentException("the length of "+field.getName()+" should be "+idAuthenticator.length());}}}}
- 应用注解
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {private String name;@IDAuthenticator(length = 4)private String id;}
- 测试:
@Test
public void useAnnotation(){Student student01 = new Student("小明", "20210122");Student student02 = new Student("小军", "2021");Student student03 = new Student("小花", "20210121");for(Student student:new Student[]{student01,student02,student03}){try{check(student);System.out.println(" Student "+student+" checks ok ");} catch (IllegalArgumentException | IllegalAccessException e) {System.out.println(" Student "+student+" checks failed "+e);}}
}
Java基础 --- 注解 Annotation相关推荐
- java基础-注解Annotation原理和用法
转载自 http://www.wolfbe.com/detail/201608/265.html 在很多java代码中都可以看到诸如@Override.@Deprecated.@SuppressWar ...
- Java基础-注解和反射
Java基础-注解和反射 前言 对于注解,我主要还是在自定义APT还有运行时反射获取类来让自己能够构建出复用性更高的代码逻辑. 知识点1-注解: 注解的应用场景由元注解@Retention来进行指定, ...
- 夯实 Java 基础 - 注解
夯实 Java 基础 - 注解 不知道大家有没有一种感觉,当你想要了解某个知识点的时候,就会发现好多技术类 APP 或者公众号在推一些关于这个知识点的文章.也许这就是大数据的作用,这也说明总有人比你抢 ...
- Java基础笔记 – Annotation注解的介绍和使用 自定义注解
1.Annotation的工作原理: JDK5.0中提供了注解的功能,允许开发者定义和使用自己的注解类型.该功能由一个定义注解类型的语法和描述一个注解声明的语法,读取注解的API,一个使用注解修饰的c ...
- java基础- 注解和反射
1. 注解(Annotation) 1. 什么是注解 Annotation是从JDK5.0开始引入的新技术. Annotation的作用 : 不是程序本身,可以对程序作出解释.(这一点和注释(comm ...
- Java基础——注解的初步认识
目录 注解(Annotation)的理解 Annotation的使用示例 自定义注解 JDK中四个基本元注解 利用反射获取注解信息 可重复注解 注解(Annotation)的理解 Annotation ...
- 1.Java基础-注解
(1) 注解 初步 : JDK1.5之后内部提供的三个注解:@Deprecated 意思是"废弃的,过时的"@Override 意思是"重写.覆盖"@Suppr ...
- Java基础-注解机制详解
文章目录 1. 注解基础 1.1 Java内置注解 1.1.1 内置注解 - @Override 1.1.2 内置注解 - @Deprecated 1.1.3 内置注解 - @SuppressWarn ...
- Java自定义注解Annotation的实现原理
文章目录 1.什么是注解? 2.注解的用处: 3.注解的原理: 4.元注解: 5.常见标准的Annotation: 6.自定义注解: 7.自定义注解实例: 1.什么是注解? 对于很多初次接触的开发 ...
最新文章
- eclipse 项目 无法 rename
- MS CRM 2011中,对于多实体数据文件的导入
- php怎么计算图片的大小,php 根据比例计算图片缩放尺寸函数的用法
- ZooKeeper 数据模型
- 软件定义网络(Software Defined Network )
- 退出登入的php怎么写,php中退出登录怎么写
- jQuery创建、删除和修改html标签
- Scanner类(next,nextLine,nextInt)的用法与常见问题
- 夜神设置android版本,使用夜神模拟器调试android app
- JavaScript数组属性和方法
- 2023每日发布行业及概念热点切换跟踪图!
- 使用js拖拽盒子移动()
- 修改app绕过模拟器检测_雷电模拟器(增强版)
- 华为OD机试 - 最远足迹
- 解决myeclipse中 保存代码时resetting selection耗时操作
- FullCalendar 学习笔记——简单的节假日设置
- 网络电视经常出现服务器无响应,为什么pps总是显示服务器未能响应停止播放
- 【Alpha阶段项目展示】Time Shaft·时间轴
- CG管理软件Shotgun改为ShotGrid
- CVPR 2019 论文解读 | 基于多级神经纹理迁移的图像超分辨方法 (Adobe Research)
热门文章
- 虎书Fundamentals of Computer Graphics 5th Edition个人学习思维导图分享-第八章 Viewing
- vasp计算压电系数_压电常数计算问题 - 第一性原理 - VaspMedeA - 小木虫论坛-学术科研互动平台...
- 67在C51语言表示16进制数,一级笔试试题考核的主要知识点及答案
- 数据挖掘经典十大算法_K-Means算法
- call()、apply()、bind()的使用和区别以及使用场景
- 功能性需求与非功能性需求
- CentOS 7 firewall-cmd开放端口时出现bad port (most likely missing protocol)解决方案
- shopee、ebay测评自养号环境解决方案(补单系统)
- 无法实名支付宝余额如何转出?除了爱心捐款有别的办法吗?
- Tensorflow 学习入门(二) 初级图像识别——手写数字识别