3

假设我想用类似的东西注释一个类@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
)

那么......我们如何生成“匿名”(或任何适合单个未命名成员的术语)注释?

4

1 回答 1

6

要使用的神奇名称是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)根据需要生成。

于 2017-12-25T22:08:26.167 回答