【问题标题】:How to generate Class parameter with javapoet?如何使用 javapoet 生成 Class 参数?
【发布时间】:2017-06-16 16:00:47
【问题描述】:

我需要为枚举类生成下一个 java.class 参数:

    public enum ServiceType {

        //....
        private final Class<?> mClass; //<<how?

        ServiceType(final Class<?> clazz) {
            this.mClass = clazz;
        }

        public Class<?> getCurrentClass() {
            return mClass;
        }
        //...
    }

我没有找到 - 如何制作这个字段。

我生成这个类的代码:

        File path = new File(Path.ROOT + ENUM_PATH);

        TypeSpec.Builder servicesEnumBuilder = TypeSpec.enumBuilder(ENUM_CLASS_NAME)
                .addModifiers(Modifier.PUBLIC);

        for (Map.Entry<String, String> entry: foundedServices.entrySet()) {
            servicesEnumBuilder.addEnumConstant(
                    entry.getKey().toUpperCase() + ENUM_SUFFIX,
                    TypeSpec.anonymousClassBuilder("$T", ClassName.get(entry.getValue() , entry.getKey())).build());
        }

        servicesEnumBuilder.addField(); //<< how add this field: private final Class<?> mClass;

【问题讨论】:

    标签: java javapoet


    【解决方案1】:

    您可以查看this answer

    适用于您的情况,它将是这样的:

        TypeName wildcard = WildcardTypeName.subtypeOf(Object.class);
        TypeName classOfAny = ParameterizedTypeName.get(
                ClassName.get(Class.class), wildcard);
        FieldSpec field = FieldSpec.builder(classOfAny, "mClass")  // You may consider using a constant here
                .addModifiers(Modifier.PRIVATE, Modifier.FINAL)
                .build();
    
        servicesEnumBuilder.addField(field);
    

    【讨论】:

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