假设我想用@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
)
那么......我们如何生成一个匿名的" (或者对于单个未命名成员的适当术语)注释?
答案 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)
。