【问题标题】:How to generate a StringDef using Javapoet in Android如何在 Android 中使用 Javapoet 生成 StringDef
【发布时间】:2017-03-05 14:33:04
【问题描述】:

如何在 Javapoet 中生成 @StringDef 枚举? 注释仅可用于方法或类型构建器,而 StringDefs 是三个注释语句,没有这两个语句。

【问题讨论】:

    标签: android annotation-processing javapoet


    【解决方案1】:

    使用 Javapoet 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());
    
    }
    

    【讨论】:

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