【问题标题】:How Do I Generate an Annotation Without a Name with JavaPoet?如何使用 JavaPoet 生成没有名称的注释?
【发布时间】:2017-12-26 06:08:26
【问题描述】:

假设我想用@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();
  }

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

@RunWith(
    null = AndroidJUnit4.class
)

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

【问题讨论】:

    标签: java javapoet


    【解决方案1】:

    要使用的神奇名称是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)

    【讨论】:

      猜你喜欢
      • 2015-11-18
      • 2021-09-19
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多