注解
2019-05-22 06:35:30来源:博客园 阅读 ()
Annotation,注解,是代码里的特殊标记,可以在编译、类加载、运行时被读取,并执行相应的处理。
注解用于为程序元素(类、方法、成员变量等)设置元数据,相当于一些补充信息,并不影响程序的执行。
注解需要使用特定的工具来处理、执行,访问、处理注解的工具统称为APT。
常见注解:
1、@Override
限定重写父类的方法。@Override相当于告诉编译器检查这个方法,要保证父类包含一个被该方法重写的方法,否则会编译出错。
主要是为了避免一些低级错误,比如要重写父类的info()方法,我们一不小心写成了inf0(),并不会报错,加上@Override后则会提示错误。
@Override只能修饰方法
2、@Deprecated
表示某个程序元素已经过时,不再推荐使用。
功能和文档注释的@deprecated相同,但@deprecated只能放在文档注释中,@Deprecated直接修饰程序单元,比如类、接口、方法等。
1 @Deprecated(since = "9",forRemoval = true)
有两个可选参数:since表示从哪个JDK版本起就不再推荐使用了,forRemoval表示未来是否会删除此xx,true表示未来会被删除。
3、@SuppressWarnings
抑制编译器警告。指定编译器不发出/忽略某方面的警告。
1 @SuppressWarnings(value = "unchecked")
有一个必须参数:value,指定编译器不发出/忽略哪些警告。“unchecked”是不发出、忽略所有警告。
4、@SafeVarargs
抑制堆污染警告。作用和上一个相同,只是@SafeVarargs专用于堆污染警告。
堆污染(heap pollution):传入的参数不是指定的类型。比如某个方法需要传入List<Integer>类型的参数,我们传入一个List<String>类型的参数,就会造成堆污染,编译会报错。
5、@FunctionalInterface
指定这个借口必须是函数式接口。@FunctionalInterface相当于告诉编译器检查这个接口定义,此接口中只能包含一个抽象方法,否则编译出错。
@FunctionalInterface只能修饰接口。
说明:以上注解只作用于它修饰的程序元素。
元注解(Meta注解):用于修饰其它注解的定义。元注解只能修饰其它注解的定义。
常见的元注解:
1、@Retention
指定被修饰的注解可以保留到什么时候。
需要指定一个参数:预定义的常量值,表示被修饰注解保留到何时(相当于指定生命周期何时结束)。
比如指定被修饰的注解保留到运行时,即该注解只在运行时、及之前起作用。
2、@Target
指定被修饰的注解 可以/只能 修饰哪些程序元素。
3、@Documented
指定被修饰的注解会被javadoc工具提取。
4、@Inherited
指定被修饰的注解具有继承性。
即使用被修饰的注解修饰某个类、接口,其子类也会自动被该注解修饰。
Java8以前,如果同一个程序元素要使用多个相同类型的注解,必须使用注解容器。比如Strut有时需要在Action类上使用多个@Result注解:
1 @Results({ @Result(name="failure",location="failed.jsp") , @Result(name="success",location="succ.jsp") })
@Results({ })是注解容器(注解名+s),里面放置多个同名的注解。
Java8新增了重复注解,上面的代码可简写成:
1 @Result(name="failure",location="failed.jsp") 2 @Result(name="success",location="succ.jsp")
Java8新增的类型注解:
1 @NotNull //不能为null 2 public class Test { 3 @NotNull //表示此成员变量的值不能为null 4 private String name; 5 public int getValue() throws @NotNull Exception{ //不能为null 6 int result=(@NotNull int)1.23; //表示后面一定要有值,不能为null 7 return result; 8 } 9 10 public void setName(@NotNull String name){ //表示此参数的值不能为null 11 this.name=name; 12 } 13 } 14 }
类型注解可以放在任何数据类型之前,表示被修饰的程序类型不能为null,为null会抛出异常。
框架中常用的注解:
1 @Null 被注释的元素必须为null 2 @NotNull 被注释的元素不能为null 3 @AssertTrue 被注释的元素必须为true 4 @AssertFalse 被注释的元素必须为false 5 @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 6 @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 7 @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 8 @DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 9 @Size(max,min) 被注释的元素的大小必须在指定的范围内。 10 @Digits(integer,fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内 11 @Past 被注释的元素必须是一个过去的日期 12 @Future 被注释的元素必须是一个将来的日期 13 @Pattern(value) 被注释的元素必须符合指定的正则表达式。 14 @Email 被注释的元素必须是电子邮件地址 15 @Length 被注释的字符串的大小必须在指定的范围内 16 @NotEmpty 被注释的字符串必须非空 17 @Range 被注释的元素必须在合适的范围内
以上注解基本都是在框架中定义中,要在框架中使用(不是JDK自带的),可以让编译器执行更严格的检查。
@NotNull是例外,在JDK中也有。
示例:
1 public class User implements Serializable { 2 /** 3 * 主键 4 */ 5 @NotNull(message = "primary is not null",groups = {GroupInterface1.class}) 6 private Long id; 7 8 @Pattern(regexp = "[0123456789]",groups = {GroupInterface1.class,GroupInterface2.class},message = "hava a error Date") 9 private Long maxDiscountAmount; 10 11 12 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") 13 private Date createTime; 14 15 @Future(message = "expireTime is not less than now",groups = {GroupInterface1.class,GroupInterface2.class}) 16 @NotNull(message = "expireTime is not null",groups = {GroupInterface1.class,GroupInterface2.class}) 17 private Date expireTime; 18 19 }
示例:
1 public class Test{ 2 3 // 非空判断 4 @NotNull(message = "id不能为空") 5 private Long id; 6 7 @Future(message = "需要一个将来日期") // 只能是将来的日期 8 // @Past //只能去过去的日期 9 @DateTimeFormat(pattern = "yyyy-MM-dd") // 日期格式化转换 10 @NotNull // 不能为空 11 private Date date; 12 13 @NotNull // 不能为空 14 @DecimalMin(value = "0.1") // 最小值0.1元 15 @DecimalMax(value = "10000.00") // 最大值10000元 16 private Double doubleValue = null; 17 18 @Min(value = 1, message = "最小值为1") // 最小值为1 19 @Max(value = 88, message = "最大值为88") // 最大值88 20 @NotNull // 不能为空 21 private Integer integer; 22 23 @Range(min = 1, max = 888, message = "范围为1至888") // 限定范围 24 private Long range; 25 26 // 邮箱验证 27 @Email(message = "邮箱格式错误") 28 private String email; 29 30 @Size(min = 20, max = 30, message = "字符串长度要求20到30之间。") 31 private String size; 32 //....... 33 }
可以同时使用多个注解修饰同一个程序元素。
当然,我们可以使用自定义的注解。
原文链接:https://www.cnblogs.com/chy18883701161/p/10901773.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Java--注解 2020-06-11
- Java 必须掌握的 12 种 Spring 常用注解! 2020-06-08
- JAVA自定义注解 2020-06-01
- Spring08_纯注解实战_支持事务版本 2020-05-29
- Spring07_纯注解实战及Spring整合Junit 2020-05-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash