`

Java parameter types of annotation introduce

    博客分类:
  • Java
阅读更多

在实际应用中遇到了Java注解参数问题,在这里记录一下其原因。

定义

Annotation (注解) 表示的是能够添加到Java源代码的语法元数据。类、方法、变量、参数、包都可以被注解,可用来将信息元数据和程序元素进行关联。

参数类型

在JLS文档中明确规定了Java annotation 参数类型必须是下面列表之一,否则会抛编译错误:

  • 所有基本数据类型(int,float,boolean,byte,double,char,long,short)
  • String type
  • Class type
  • Enum type
  • Annotation type
  • 以及上面所有类型的数组
问题

实际应用中遇到如下两个疑问。

  1. 为什么不支持其他类型?
  2. 注解参数中为什么不支持对象方法?

#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项目 hibernate annotation

    Java SSH项目是基于三个主要框架——Struts、Spring和Hibernate构建的企业级Web应用程序。这个项目中,Hibernate作为ORM(对象关系映射)工具被用来处理数据库操作,而使用了注解方式来配置Hibernate,这是一种更加...

    Annotation--学习:JDK内建Annotation

    在Java编程语言中,Annotation(注解)是一种元数据,它提供了在编译时和运行时为代码添加信息的方式。注解是自Java 5版本引入的特性,它增强了代码的可读性和可维护性,同时也简化了某些编程任务。在本篇中,我们将...

    Java 5 annotation 学习笔记

    Java 5引入的注解(Annotation)是一种元数据,它提供了在代码中嵌入信息的方式,这些信息可以被编译器、JVM或其他工具在编译时或运行时使用。注解可以用来简化代码,提高可维护性,并帮助工具进行静态分析。 1. ...

    Java Annotation

    ### Java Annotation 概述与应用 #### 一、Java Annotation 的定义及作用 Java Annotation(注解)是自 Java 5.0 开始引入的一种语言元素,它为开发者提供了在代码中添加元数据的能力。简单来说,注解就像是对代码...

    JAVA 标注annotation

    Java annotation 什么是java annotation?annotation 的7种标注类型。nnotation提供了一条与程序元素关联任何信息或者任何元数据(metadata)的途径。从某些方面看,annotation就像修饰符一样被使用,并应用于包、...

    java之Annotation及其应用

    Java注解(Annotation)是Java语言的一个重要特性,它为元数据提供了强大的支持。元数据是一种描述数据的数据,可以提供有关代码的附加信息,而这些信息并不直接影响代码的执行。在Java中,注解用于向编译器、JVM或...

    struts 拦截器,扩展,以及java annotation

    3. **Java注解(Annotation)**: - Java注解是元数据的一种形式,用于提供有关代码的信息,而这些信息可以被编译器或运行时环境用来执行某些操作。在Struts2中,注解广泛用于简化配置,如`@Action`、`@Result`、`@...

    Java-Annotation使用大全

    Java-Annotation使用大全 Java-Annotation使用大全 Java-Annotation使用大全

    Java基础之注解Annotation初入篇_刘永雷

    学习java自定义注解的小例子,处理运行时注解方法,可以结合博客学习,博客地址: http://blog.csdn.net/liuyonglei1314/article/details/59494503

    Java annotation (JDK5)

    Java的`javax.annotation.processing.Processor`接口定义了注解处理器的规范。 5. 使用注解 注解可以应用于类、方法、字段、参数、构造函数、包等不同级别。例如: ```java @MyAnnotation("Hello, World!") ...

    自定义annotationProcessor

    在Java编程中,注解(Annotation)是一种元数据,它提供了在代码中插入信息的方式,这些信息可以被编译器或运行时环境用来执行特定的动作。`@AnnotationProcessor`是与注解处理相关的概念,主要涉及到Java的编译器...

    java annotation demo

    Java 注解(Annotation)是Java语言提供的一种元编程机制,它允许程序员在源代码的各个元素(如类、方法、变量等)上添加信息。这些信息可以被编译器或运行时系统用来验证代码、执行特定操作或者提供额外的运行时...

    Java Annotation手册

    《Java Annotation手册》 在Java编程语言中,注解(Annotation)是一种元数据,它提供了在编译时或运行时处理代码的一种方式。通过注解,开发者可以向编译器或JVM提供有关代码的附加信息,而这些信息通常不直接影响...

    JDK5.0 Java Annotation 介绍(ppt)

    Java Annotation 是 JDK5.0 引入的一种元数据机制,它允许程序员在代码中嵌入额外的信息,这些信息可以被编译器、构建工具或运行时系统用来执行特定的任务。Annotation 提供了一种安全、灵活的方式来描述代码的属性...

    Java并发编程源码缺失的Annotation

    网上的Java并发编程源码一般都缺失一些Annotation,导致导入会报错。

    JAVA Annotation学习

    Java注解(Annotation)是Java语言的一个重要特性,它为元数据提供了强大的支持。元数据是关于数据的数据,可以提供额外的信息,这些信息虽然不是程序运行所必需的,但能够帮助编译器、JVM(Java虚拟机)或工具更好...

    java1.5 annotation注释源代码

    Java 1.5 引入了一种新的元编程机制——注解(Annotation),极大地增强了代码的可读性和可维护性。注解是一种在代码中添加元数据的方式,它允许程序员在源代码上添加一些信息,这些信息可以被编译器或运行时环境...

Global site tag (gtag.js) - Google Analytics