创建实例的Java 8注释

用户名

在Javadocs for Annotations中,它指出可以用Java 8编写以下内容:

new @Interned MyObject();

无论如何,是否可以通过反射从这样注释的对象中检索注释@Interned?我熟悉从方法,字段,类等中检索注释的典型方法,但是我想知道是否有可能在Java 8运行时将特定实例与注释相关联。

霍尔格

注释应用于实例创建像new @Anno Object()被创建的对象的属性,但仅(编译时间)类型的new表达。在运行时,对象的实际类型没有注释,就像它没有在实例创建时可能已指定的泛型类型参数一样。

请考虑以下示例:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE_USE)
@interface Anno { int value(); }

@Anno(1) Object o=new @Anno(2) Object();
@Anno(3) Object p=(@Anno(4) Object)o;

在这里,简单对象要经过几个类型的变化,从@Anno(2) Object@Anno(1) Object@Anno(4) Object@Anno(3) Object并在此代码相同的对象,甚至连两个不同类型的变量举行的结束,@Anno(1) Object@Anno(3) Object在同一时间!

您可以使用审核工具来验证这些类型转换在语义上是否合法@Anno,但是对于Java语言本身,它们没有任何意义,并且将始终被接受。并且在运行时,实例的类型将始终Object不受类型注释的影响。

Reflection API提供了查询类和成员的声明的带注释类型的方法,其中包括方法的参数和返回类型,但是您无法查询new表达式的类型注释,因为您将无法找出方法是否真正包含new表达式,更不用说应用于该new表达式的类型注释了

可能有第三方库建立在字节码处理库上,它将在运行时提供对这些注释的访问…

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何创建注释实例

Java 8可重复注释

在Java中使用默认值创建注释实例

Java 8,类型注释和JSR 308

无法使用Java 8修改package-info.java的注释

Java 8,Google Reflections-将带注释的类型作为注释列表而不是类<?>

java8-注释Comparable <T>的compareTo <T>将注释添加到compareTo(Object o)

早期版本的Java 8可重复注释模拟

删除Java8中的@Override注释错误

我如何通过使用Java 8注释的方法?

Java 8可重复的自定义注释

向Antlr Java 8语法添加注释

Java 8:我们可以使用 map 在流中创建实例方法 ref 吗?

Java注释-如何创建数组?

如果在List或Map中对数组进行注释,则Java 8 TYPE_USE注释将不起作用

创建Vue实例注释掉所有内容

是否有k8s注释用于设置AWS中自动创建的LB的名称

接口method's注释继承了Java 7中,但没有在Java中8

使用`lombok`注释和Java JDK 8在内存中编译Java类

了解实例变量名称以及使用Spring @Bean注释创建实例变量的方法

如何使用JDK8和JDK11阅读的Java注释的价值?

在Java 8默认接口方法上使用Spring @Transactional注释是否安全?

Java 8为什么将注释不同地应用于派生类?

尝试使用Java 8和Maven 3.2.3编译代码时,我的注释出现奇怪的错误

用Java创建实例

在Java中创建和使用注释

给定Class <可以实例化Java注释吗?扩展注解>?

默认Java注释值:按规范是同一实例吗?

使用对象实例而不是类的 Java 注释反射