Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中使用Javapoet生成StringDef_Android_Annotation Processing_Javapoet - Fatal编程技术网

如何在Android中使用Javapoet生成StringDef

如何在Android中使用Javapoet生成StringDef,android,annotation-processing,javapoet,Android,Annotation Processing,Javapoet,如何在Javapoet中生成@StringDef枚举? 注释仅适用于方法或类型构建器,StringDef是三条注释语句,但两者都没有 使用JavaPoter 1.8.0+可以使用如下代码: private void createEnumStringDef(TypeSpec.Builder beanBuilder, String enumName, List<String> enumValues) { String defValues = "{"; for (Str

如何在Javapoet中生成@StringDef枚举?
注释仅适用于方法或类型构建器,StringDef是三条注释语句,但两者都没有

使用JavaPoter 1.8.0+可以使用如下代码:

private void createEnumStringDef(TypeSpec.Builder beanBuilder, String enumName, List<String> enumValues) {

    String defValues = "{";

    for (String defVal :enumValues) {
        defValues += enumName +"." +defVal.toUpperCase() +",";
    }

    defValues = Utils.removeLastChar(defValues) + "}";

    TypeSpec.Builder stringDef = TypeSpec.annotationBuilder(enumName)
            .addModifiers(Modifier.PUBLIC)
            .addAnnotation(AnnotationSpec.builder(ClassName.get("android.support.annotation", "StringDef")).addMember("value", defValues).build())
            .addAnnotation(AnnotationSpec.builder(ClassName.get("java.lang.annotation", "Retention")).addMember("value", "$T.SOURCE", ClassName.get("java.lang.annotation", "RetentionPolicy")).build());

    for (String defVal : field.enumValues) {
        stringDef.addField(FieldSpec.builder(String.class, defVal.toUpperCase())
                .addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL)
                .initializer("$S", defVal)
                .build());
    }

    beanBuilder.addType(stringDef.build());

}
private void createEnumStringDef(TypeSpec.Builder beanBuilder、字符串enumName、列表EnumValue){
字符串defValues=“{”;
for(字符串定义:枚举值){
defValues+=enumName+“+defVal.toUpperCase()+”,“;
}
defValues=Utils.removeLastChar(defValues)+“}”;
TypeSpec.Builder stringDef=TypeSpec.annotationBuilder(enumName)
.addModifiers(Modifier.PUBLIC)
.addAnnotation(AnnotationSpec.builder(ClassName.get(“android.support.annotation”,“StringDef”)).addMember(“value”,defValues).build()
.addAnnotation(AnnotationSpec.builder(ClassName.get(“java.lang.annotation”,“Retention”)).addMember(“value”,“$T.SOURCE”,ClassName.get(“java.lang.annotation”,“RetentionPolicy”)).build();
for(字符串定义:field.enumValues){
stringDef.addField(FieldSpec.builder(String.class,defVal.toUpperCase())
.addModifiers(Modifier.PUBLIC、Modifier.STATIC、Modifier.FINAL)
.初始值设定项($S),定义值)
.build());
}
addType(stringDef.build());
}