Module jdk.jfr
Package jdk.jfr

Class AnnotationElement

java.lang.Object
jdk.jfr.AnnotationElement

public final class AnnotationElement extends Object
描述事件元数据,如标签、描述和单位。

以下示例展示了如何使用AnnotationElement动态定义事件。

List<AnnotationElement> typeAnnotations = new ArrayList<>();
typeAnnotations.add(new AnnotationElement(Name.class, "com.example.HelloWorld"));
typeAnnotations.add(new AnnotationElement(Label.class, "Hello World"));
typeAnnotations.add(new AnnotationElement(Description.class, "Helps programmer getting started"));

List<AnnotationElement> fieldAnnotations = new ArrayList<>();
fieldAnnotations.add(new AnnotationElement(Label.class, "Message"));

List<ValueDescriptor> fields = new ArrayList<>();
fields.add(new ValueDescriptor(String.class, "message", fieldAnnotations));

EventFactory f = EventFactory.create(typeAnnotations, fields);
Event event = f.newEvent();
event.commit();
自 JDK 9 起:
9
  • Constructor Details

    • AnnotationElement

      public AnnotationElement(Class<? extends Annotation> annotationType, Map<String,Object> values)
      创建一个用于动态定义事件的注解元素。

      支持的值类型包括byteintshortlongdoublefloatbooleancharString。不支持枚举、数组和类。

      如果annotationType具有注解(直接存在、间接存在或关联的),则这些注解将被递归包含。但是,annotationType和递归找到的任何注解都必须具有MetadataDefinition注解。

      要静态定义事件,请参见Event类。

      参数:
      annotationType - 扩展java.lang.annotation.Annotation的接口,不能为空
      values - 一个带有与指定注解接口的方法名匹配的键的Map
      抛出:
      IllegalArgumentException - 如果值/键为null,使用了不受支持的值类型,或使用了与annotationType中的签名不匹配的值/键
    • AnnotationElement

      public AnnotationElement(Class<? extends Annotation> annotationType, Object value)
      创建一个用于动态定义事件的注解元素。

      支持的值类型包括byteintshortlongdoublefloatbooleancharString。不支持枚举、数组和类。

      如果annotationType具有注解(直接存在、间接存在或关联的),则这些注解将被递归包含。但是,annotationType和递归找到的任何注解都必须具有MetadataDefinition注解。

      要静态定义事件,请参见Event类。

      参数:
      annotationType - 扩展java.lang.annotation.Annotation的接口,不能为空
      value - 与指定annotationTypevalue方法匹配的值
      抛出:
      IllegalArgumentException - 如果值/键为null,使用了不受支持的值类型,或使用了与annotationType中的签名不匹配的值/键
    • AnnotationElement

      public AnnotationElement(Class<? extends Annotation> annotationType)
      创建一个用于动态定义事件的注解元素。

      支持的值类型包括byteshortintlongdoublefloatbooleancharString。不支持枚举、数组和类。

      如果annotationType具有注解(直接存在、间接存在或关联的),则这些注解将被递归包含。但是,annotationType和递归找到的任何注解都必须具有MetadataDefinition注解。

      要静态定义事件,请参见Event类。

      参数:
      annotationType - 扩展java.lang.annotation.Annotation的接口,不能为空
  • Method Details

    • getValues

      public List<Object> getValues()
      返回按照此AnnotationElement的值描述符顺序排列的注解值的不可变列表。
      返回:
      值列表,不能为空
    • getValueDescriptors

      public List<ValueDescriptor> getValueDescriptors()
      返回描述此AnnotationElement的注解值的不可变描述符列表。
      返回:
      Annotation的值描述符列表,不能为空
    • getAnnotationElements

      public List<AnnotationElement> getAnnotationElements()
      返回此AnnotationElement的不可变注解元素列表。
      返回:
      元注解列表,不能为空
    • getTypeName

      public String getTypeName()
      返回与此AnnotationElement对应的注解类型的完全限定名称(例如,"jdk.jfr.Label")。
      返回:
      类型名称,不能为空
    • getValue

      public Object getValue(String name)
      返回此AnnotationElement的值。
      参数:
      name - 注解接口中的方法名称,不能为空
      返回:
      注解值,不能为空
      抛出:
      IllegalArgumentException - 如果注解中不存在指定名称的方法
    • hasValue

      public boolean hasValue(String name)
      如果在此AnnotationElement中存在具有指定名称的注解值,则返回true
      参数:
      name - 要查找的注解接口中的方法名称,不能为空
      返回:
      如果方法存在则返回true,否则返回false
    • getAnnotation

      public final <A> A getAnnotation(Class<? extends Annotation> annotationType)
      如果存在具有相同名称的AnnotationElement,则返回指定类型的第一个注解,否则返回null
      类型参数:
      A - 要查询并返回的注解类型
      参数:
      annotationType - 与注解类型对应的Class对象,不能为空
      返回:
      如果存在指定注解类型的元素注解,则返回该元素的注解,否则返回null
    • getTypeId

      public long getTypeId()
      返回此AnnotationElement的类型 ID。

      ID是Java虚拟机(JVM)中类型的唯一标识符。ID在不同的JVM实例之间可能不相同。

      返回:
      类型 ID,非负数