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

Com*_*are 4 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();
  }
Run Code Online (Sandbox Code Playgroud)

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

@RunWith(
    null = AndroidJUnit4.class
)
Run Code Online (Sandbox Code Playgroud)

那么...我们如何生成一个“匿名”(或对于单个未命名成员的专有名词)注释?

Com*_*are 5

使用的魔术名称是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();
  }
Run Code Online (Sandbox Code Playgroud)

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