在实际应用中遇到了Java注解参数问题,在这里记录一下其原因。
定义
Annotation (注解) 表示的是能够添加到Java源代码的语法元数据。类、方法、变量、参数、包都可以被注解,可用来将信息元数据和程序元素进行关联。
参数类型
在JLS文档中明确规定了Java annotation 参数类型必须是下面列表之一,否则会抛编译错误:
- 所有基本数据类型(int,float,boolean,byte,double,char,long,short)
- String type
- Class type
- Enum type
- Annotation type
- 以及上面所有类型的数组
问题
实际应用中遇到如下两个疑问。
- 为什么不支持其他类型?
- 注解参数中为什么不支持对象方法?
#1
在Java中,annotation只能用编织器常量,String也是特殊处理的常量,所以它是所支持的类型。对于变量,就要涉及初始化,序列化等问题,不知出于什么原因目前在Java注解中是不支持的,也许是一种取舍的选择。
为了更清晰的了解器原因,查看JVM规范(Java SE 8版)的4.7.16.1. The element_value structure对annotation的element可以取值的相关规定。
首先,在Class文件里,所有原始类型、String、Class常量都是有特殊支持的,对于一般Object对象,接口和enum常量是不支持的,详细解析如下:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.16.1-130
根据JLS规范我们了解到Annotation的参数也是一种编译时常量,且必须能够被Class文件所支持,说明Java 不想为了一个Annotation对Class文件和JVM做太大改动。
然而在实际应用中我们会发现这样使得annnotation的能力大大折扣,如果可以支持interface或enum将对注解的应用性有大大提升,期待java后期版本中可以改善。
#2
Annotation参数不仅仅不能是Object,同时由于它的参数必须是一种编译时常量,所以例如下面的写法是不合法的
@MyAnnotatiion(value="name"+myobject.doSomeThing())相关详细信息请参照 https://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html#jls-9.6.1
相关推荐
Java SSH项目是基于三个主要框架——Struts、Spring和Hibernate构建的企业级Web应用程序。这个项目中,Hibernate作为ORM(对象关系映射)工具被用来处理数据库操作,而使用了注解方式来配置Hibernate,这是一种更加...
在Java编程语言中,Annotation(注解)是一种元数据,它提供了在编译时和运行时为代码添加信息的方式。注解是自Java 5版本引入的特性,它增强了代码的可读性和可维护性,同时也简化了某些编程任务。在本篇中,我们将...
Java 5引入的注解(Annotation)是一种元数据,它提供了在代码中嵌入信息的方式,这些信息可以被编译器、JVM或其他工具在编译时或运行时使用。注解可以用来简化代码,提高可维护性,并帮助工具进行静态分析。 1. ...
### Java Annotation 概述与应用 #### 一、Java Annotation 的定义及作用 Java Annotation(注解)是自 Java 5.0 开始引入的一种语言元素,它为开发者提供了在代码中添加元数据的能力。简单来说,注解就像是对代码...
Java annotation 什么是java annotation?annotation 的7种标注类型。nnotation提供了一条与程序元素关联任何信息或者任何元数据(metadata)的途径。从某些方面看,annotation就像修饰符一样被使用,并应用于包、...
Java注解(Annotation)是Java语言的一个重要特性,它为元数据提供了强大的支持。元数据是一种描述数据的数据,可以提供有关代码的附加信息,而这些信息并不直接影响代码的执行。在Java中,注解用于向编译器、JVM或...
3. **Java注解(Annotation)**: - Java注解是元数据的一种形式,用于提供有关代码的信息,而这些信息可以被编译器或运行时环境用来执行某些操作。在Struts2中,注解广泛用于简化配置,如`@Action`、`@Result`、`@...
Java-Annotation使用大全 Java-Annotation使用大全 Java-Annotation使用大全
学习java自定义注解的小例子,处理运行时注解方法,可以结合博客学习,博客地址: http://blog.csdn.net/liuyonglei1314/article/details/59494503
Java的`javax.annotation.processing.Processor`接口定义了注解处理器的规范。 5. 使用注解 注解可以应用于类、方法、字段、参数、构造函数、包等不同级别。例如: ```java @MyAnnotation("Hello, World!") ...
在Java编程中,注解(Annotation)是一种元数据,它提供了在代码中插入信息的方式,这些信息可以被编译器或运行时环境用来执行特定的动作。`@AnnotationProcessor`是与注解处理相关的概念,主要涉及到Java的编译器...
Java 注解(Annotation)是Java语言提供的一种元编程机制,它允许程序员在源代码的各个元素(如类、方法、变量等)上添加信息。这些信息可以被编译器或运行时系统用来验证代码、执行特定操作或者提供额外的运行时...
《Java Annotation手册》 在Java编程语言中,注解(Annotation)是一种元数据,它提供了在编译时或运行时处理代码的一种方式。通过注解,开发者可以向编译器或JVM提供有关代码的附加信息,而这些信息通常不直接影响...
Java Annotation 是 JDK5.0 引入的一种元数据机制,它允许程序员在代码中嵌入额外的信息,这些信息可以被编译器、构建工具或运行时系统用来执行特定的任务。Annotation 提供了一种安全、灵活的方式来描述代码的属性...
网上的Java并发编程源码一般都缺失一些Annotation,导致导入会报错。
Java注解(Annotation)是Java语言的一个重要特性,它为元数据提供了强大的支持。元数据是关于数据的数据,可以提供额外的信息,这些信息虽然不是程序运行所必需的,但能够帮助编译器、JVM(Java虚拟机)或工具更好...
Java 1.5 引入了一种新的元编程机制——注解(Annotation),极大地增强了代码的可读性和可维护性。注解是一种在代码中添加元数据的方式,它允许程序员在源代码上添加一些信息,这些信息可以被编译器或运行时环境...