注解

简介: 注解是JAVA5引入JAVA的一个特性,理解起来会有点抽象,这里笔者先给出自己对注解的一个理解——注解就是一张便签!其次要有一个概念就是注解的应用是基于反射的。本文举出的三个实例中例1和例3是引用其它的优秀文献出处为how2J以及 https://blog.csdn.net/briblue/article/details/73824058一文

基础注解

JDK中有几个基本内置注解,基本注解就是JAVA已经封装好了的注解,拿来用就是。

其实基础注解除了@Override和@Deprecated会偶尔用到以外,其他几个基本不会用到意义不大,看个热闹就是。

最重要的还是元注解。

@Override

表示方法重写

@Deprecated

表示方法以及过期,下个版本可能被删掉。

2019081116585142.png

@SuppressWarnings

用于抑制告警

比如@SuppressWarnings({ "rawtypes", "unused" })用于抑制泛型未声明的告警。


@SuppressWarnings 有常见的值,分别对应如下意思


1.deprecation:使用了不赞成使用的类或方法时的警告(使用@Deprecated使得编译器产生的警告);


2.unchecked:执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型; 关闭编译器警告


3.fallthrough:当 Switch 程序块直接通往下一种情况而没有 Break 时的警告;


4.path:在类路径、源文件路径等中有不存在的路径时的警告;


5.serial:当在可序列化的类上缺少 serialVersionUID 定义时的警告;


6.finally:任何 finally 子句不能正常完成时的警告;


7.rawtypes 泛型类型未指明


8.unused 引用定义了,但是没有被使用


9.all:关于以上所有情况的警告。

@SafeVarargs

这是1.7 之后新加入的基本注解. 如例所示,当使用可变数量的参数的时候,而参数的类型又是泛型T的话,就会出现警告。 这个时候,就使用@SafeVarargs来去掉这个警告。

元注解

元注解是JAVA专门留给开发者自定义注解使用的,也就是可以用在注解中的注解。

@Target

@Target 表示这个注解允许被放在什么位置


ElementType.TYPE:能修饰类、接口或枚举类型


ElementType.FIELD:能修饰成员变量


ElementType.METHOD:能修饰方法


ElementType.PARAMETER:能修饰参数


ElementType.CONSTRUCTOR:能修饰构造器


ElementType.LOCAL_VARIABLE:能修饰局部变量


ElementType.ANNOTATION_TYPE:能修饰注解


ElementType.PACKAGE:能修饰包

@Retention

@Retention用来声明生命周期

 

RetentionPolicy.SOURCE:源码阶段

RetentionPolicy.CLASS: 编译阶段

RetentionPolicy.RUNTIME:运行阶段

@Inherited

表示注解可以被子类继承。即子类继承父类以后,也可以继承父类的注解。

@Documented

表示生成API

@Repeatable

表示注解在同一个地方可以出现多次,如果不加这个注解的话,同一个地方注解只能出现一次。

自定义注解

关于自定义注解说起来很简单,用@interface修饰起来,然后各种元注解,一个自定义的注解就产生了。

但用起来却很有学问——注解到底用在什么地方?这个问题其实是没有标准答案的,注解就像一张便签纸,你想把它贴在哪里都可以,而且根据便签上的内容的不同,这张便签起到的作用也不同。这里举两个自定义注解的例子,来和大家一起找找感觉,打开一下思路,看看注解应该用在什么地方。

例1

注解用来存放变量。

20190811170749480.png

20190811171133143.png

例2

注解用来做分类判断

为一个People贴上一张MyComponent的标签,那这个people就会被分到MyComponent这分类中去。就像我们生活中贴上好人的标签,大众就把你归类为好人,贴上坏人的标签大众就把你归类为坏人是一个道理。


至于为什么不抽象出一个MyComponent让P类去实现它,然后判断类是不是MyComponent.class类型?


问题是这种模式只能作用于类层面,无法作用于方法层面,而注解就可以办到。


仔细想想Spring体系中的注解开发是不是就是这个原理??

20190811173908708.png

20190811173924100.png

20190811173941482.png

20190811173953174.png

例3

其实例3就是结合了例1和例2,实例代码很简单,就是一个注解版的hibernate类

每一个属性单独抽象出一个注解,注解里面就存放一个属性就OK。

20190811174915428.png

目录
相关文章
|
Android开发
Android RecyclerView的notify方法和动画的刷新详解(二)
Android RecyclerView的notify方法和动画的刷新详解
494 0
|
Linux 测试技术 API
Linux PWM接口概述 【ChatGPT】
Linux PWM接口概述 【ChatGPT】
|
自然语言处理 IDE 开发工具
利用codeGeex在IDE中自动写注释、自动补充简单编码。
利用codeGeex在IDE中自动写注释、自动补充简单编码。
560 2
|
负载均衡 Java Serverless
函数计算产品使用问题之如何查看函数计算的QPS(每秒查询率)
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
270 0
Visual Studio2019安装闪退(不弹出下载界面)等问题解决方法
Visual Studio2019安装闪退(不弹出下载界面)等问题解决方法
1439 0
Visual Studio2019安装闪退(不弹出下载界面)等问题解决方法
|
SQL 数据处理 HIVE
HIVE的数据倾斜调优
hive数据倾斜主要是由shuffle引起的,而引起shuffle的又主要有四种情况,分别为: 1.group by 2.join 3.count(distinct) 4.开窗函数
496 8
|
数据安全/隐私保护
JumpServer的权限管理
文章介绍了JumpServer的权限管理操作,包括如何创建授权规则和验证授权是否成功。
402 2
|
存储 安全 Shell
Android系统 adb shell auth授权使用
Android系统 adb shell auth授权使用
1561 2
|
安全 数据安全/隐私保护
基于RBAC实现权限系统
基于RBAC实现权限系统
813 0
|
存储 关系型数据库 数据库
PostgreSQL孤儿文件
与所有其他关系数据库系统一样,PostgreSQL需要通过写入wal日志或在Checkpoint时同步数据到数据文件来持久化数据到磁盘上。对于数据文件,一旦Relation达到SEGMENT_SIZE(默认1GB),PostgreSQL就会创建一个新的数据文件。因此如果Relation持续增长,则该Relation可能会由多个文件组成。在这篇文章中想要考虑的问题是,是否可能存在孤儿文件。