博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
猿来绘Java-45-JDK8新特性可重复注解和类型注解
阅读量:2094 次
发布时间:2019-04-29

本文共 2063 字,大约阅读时间需要 6 分钟。

Java 8对注解处理提供了两点改进: 可重复的注解及可用于类型的注解。此外,反射也得到了加强,在Java8中能够得到方法参数的名称。这会简化标注在方法参数上的注解

可重复注解:

① 在MyAnnotation上声明@Repeatable,成员值为MyAnnotations.class

② MyAnnotation的Target和Retention等元注解与MyAnnotations相同。(相同的Target,Retention,Inherited)

JDK8之前可重复注解的写法

package com.ylaihui.annotation2;public @interface MyAnn {    String value() default "ylaihui";}
package com.ylaihui.annotation2;public @interface MyAnnotations {    MyAnn[] value();}
//MyAnnotationsTest.javapackage com.ylaihui.annotation2;// 注解不能重复//Duplicate annotation. The declaration of //'com.ylaihui.annotation2.MyAnn' does not have a valid//@MyAnn("yyyy")//@MyAnn("lll")@MyAnnotations({@MyAnn("yyyy"), @MyAnn("llll")})public class MyAnnotationsTest {}

JDK8可重复注解的写法

package com.ylaihui.annotation3;import java.lang.annotation.Repeatable;@Repeatable(MyAnnotations.class)public @interface MyAnn {    String value() default "ylaihui";}
package com.ylaihui.annotation3;import java.lang.annotation.Repeatable;public @interface MyAnnotations {    MyAnn[] value();}
//MyAnnotationsTest.javapackage com.ylaihui.annotation3;// JDK1.8 新特性,注解可重复,但是需要配置,以下两种写法等价@MyAnn("yyyy")@MyAnn("lll")//@MyAnnotations({@MyAnn("yyyy"), @MyAnn("llll")})public class MyAnnotationsTest {}

JDK8新特性类型注解

JDK1.8之后,关于元注解@Target的参数类型ElementType枚举值多了两个:TYPE_PARAMETER,TYPE_USE。

在Java 8之前, 注解只能是在声明的地方所使用, Java8开始, 注解可以应用在任何地方。

ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中(如: 泛型声明) 修饰的类型可以通过反射获取

ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中。

package com.ylaihui.annotation4;import java.lang.annotation.Target;import static java.lang.annotation.ElementType.*;@Target({TYPE_PARAMETER, TYPE_USE})public @interface MyAnn {    String[] value() default "ylaihui";}
//AnnotationTest.javapackage com.ylaihui.annotation4;import java.util.ArrayList;class Annotations<@MyAnn T>{    public void info(@MyAnn String string) throws @MyAnn RuntimeException{        ArrayList<@MyAnn String> list = new ArrayList<>();        int d = (@MyAnn int)100.00;        System.out.println(string);    }}public class AnnotationTest {    public static void main(String[] args) {    }}

转载地址:http://uxuhf.baihongyu.com/

你可能感兴趣的文章
Spark代码可读性与性能优化——示例七(构建聚合器,以用于复杂聚合)
查看>>
Spark代码可读性与性能优化——示例八(一个业务逻辑,多种解决方式)
查看>>
简单理解 HTTPS
查看>>
简单理解 NAT
查看>>
RPC框架——Thrift简单示例
查看>>
RPC框架——gRPC简单示例
查看>>
JVM对象头的简单记录
查看>>
从Java代码到Java堆——理解并优化你的应用的内存使用量
查看>>
Redis持久化与过期机制
查看>>
关于在网络中使用BIO、NIO、AIO的示例
查看>>
网络通信框架——Netty示例
查看>>
网络通信框架——KyroNet示例
查看>>
JVM对synchronized的优化——锁膨胀
查看>>
MySQL中的索引 B+Tree
查看>>
字符编码与解码(附:Java字符流与字节流源码剖析)
查看>>
Spark优化总结(一)——数据倾斜
查看>>
Spark代码可读性与性能优化——示例九(数据传输与解析)
查看>>
Spark代码可读性与性能优化——示例十(项目结构)
查看>>
Spark优化总结(二)——代码编写
查看>>
Spark优化总结(三)——调参
查看>>