如何使用JavaPoet生成没有名称的注释?

时间:2017-12-25 22:08:26

标签: java javapoet

假设我想用@RunWith(AndroidJUnit4.class)之类的东西注释一个类。一般的JavaPoet配方是:

  private static ClassName RUN_WITH=ClassName.get("org.junit.runner", "RunWith");
  private static ClassName ANDROID_JUNIT4=ClassName.get("android.support.test.runner", "AndroidJUnit4");

  private TypeSpec buildTestClass() {
    return TypeSpec.classBuilder("MainActivityTest")
      .addModifiers(Modifier.PUBLIC)
      .addAnnotation(AnnotationSpec.builder(RUN_WITH)
        .addMember(null, "$T.class", ANDROID_JUNIT4)
        .build())
      .build();
  }

但是,addMember()上的两个AnnotationSpec.Builder方法都采用了成员名称......我不想要一个名字。我尝试null,如上所示,并生成:

@RunWith(
    null = AndroidJUnit4.class
)

那么......我们如何生成一个匿名的" (或者对于单个未命名成员的适当术语)注释?

1 个答案:

答案 0 :(得分:4)

要使用的神奇名称是value

  private static ClassName RUN_WITH=ClassName.get("org.junit.runner", "RunWith");
  private static ClassName ANDROID_JUNIT4=ClassName.get("android.support.test.runner", "AndroidJUnit4");

  private TypeSpec buildTestClass() {
    return TypeSpec.classBuilder("MainActivityTest")
      .addModifiers(Modifier.PUBLIC)
      .addAnnotation(AnnotationSpec.builder(RUN_WITH)
        .addMember("value", "$T.class", ANDROID_JUNIT4)
        .build())
      .build();
  }

根据需要生成@RunWith(AndroidJUnit4.class)