首页 > 解决方案 > 如何获取在类中声明的自定义注释列表

问题描述

我创建了自定义注释来获取在运行时具有这些标记的类列表(按预期工作)。

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Marker {
  @interface Only{}
  @interface Marker1{}
  @interface Marker2{}
}

我需要一种机制来获取在这些测试类中声明的标记列表。下面是我试图运行以获得这些的代码,但没有运气!

@Marker.Only
public class Sample {

    @Test
    public void main() {
        Assert.assertTrue(true);
    }

    @AfterMethod
    public void m2(ITestResult result) {
        Annotation[] acc = result.getMethod().getRealClass().getAnnotations();
        // Getting blank array as acc
        System.out.println(acc);
    }
}

标签: javareflection

解决方案


@Marker您声明了一个具有保留的顶级类型RUNTIME,但随后您声明了几个嵌套类型(顺便说一下,对于注释来说不典型),每个都没有保留策略,因此默认为CLASS. 将保留策略应用于您的每种注释类型。


推荐阅读