假设我想用诸如 @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
)
所以...我们如何生成一个"匿名"(或单个不明会成员的正确术语)注释?
要使用的魔术名称是 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)
。