在JavaPoet中使用继承的智能方法

时间:2017-03-26 20:06:47

标签: java javapoet

我正在尝试以这种方式构建一个类(使用JavaPoet lib):

theClass = TypeSpec.classBuilder(classe.getName())
                                    .addModifiers(javax.lang.model.element.Modifier.valueOf(classe.getProte().toString().toUpperCase()), Modifier.FINAL) //todo
                                    .addMethods(methods)
                                    .superclass(father)
                                    .addFields(fields)
                                    .build();

哪个领域“父亲”可以什么都不是。我尝试在其中放置NULL,但它以这种方式给出了异常。是不是有一种聪明的方式来写它?

我可以写点像

if (father!=null){
   theClass = TypeSpec.classBuilder(classe.getName())
                                .addModifiers(javax.lang.model.element.Modifier.valueOf(classe.getProte().toString().toUpperCase()), Modifier.FINAL) //todo
                                .addMethods(methods)
                                .superclass(father)
                                .addFields(fields)
                                .build();
}
else{
   theClass = TypeSpec.classBuilder(classe.getName())
                                .addModifiers(javax.lang.model.element.Modifier.valueOf(classe.getProte().toString().toUpperCase()), Modifier.FINAL) //todo
                                .addMethods(methods)
                                .addFields(fields)
                                .build();
}

但这不会很好。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

您可以立即做的一件事就是缩短代码,首先使用您想要的大多数字段填充构建器:

public TypeSpec aNiceMethod(
     ClassModel classe, TypeName father, ArrayList methods, ArrayList fields) {

   TypeSpec.Builder theClassBuilder = TypeSpec.classBuilder(classe.getName())
       .addModifiers(
           javax.lang.model.element.Modifier.valueOf(
               classe.getProte().toString().toUpperCase()),
               Modifier.FINAL)
       .addMethods(methods)
       .addFields(fields);
   if (father != null) {
        theClassBuilder.superclass(father);
   }
   return theClassBuilder.build();
}

答案 1 :(得分:1)

试试这个:

if (father == null) {
  father = ClassName.OBJECT;
}

JavaPoet会做正确的事。