JavaPoet中使用继承的智能方法

JavaPoet中使用继承的智能方法,java,javapoet,Java,Javapoet,我正试图以这种方式构建一个类(使用JavaPoter库): “父亲”这个领域可能什么都不是。我尝试使用将NULL放入其中,但它以这种方式给出了一个异常。难道没有一个聪明的方法来写它吗 我可以写这样的东西 if (father!=null){ theClass = TypeSpec.classBuilder(classe.getName()) .addModifiers(javax.lang.model.element.Modi

我正试图以这种方式构建一个类(使用JavaPoter库):

“父亲”这个领域可能什么都不是。我尝试使用将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();
}

但那可不好。有什么建议吗?

要缩短代码,您可以立即做的一件事是首先用所需的大多数字段填充生成器:

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();
}
试试这个:

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

JavaPoet会做正确的事。

父亲==null吗?Object.class:父亲工作?在这种情况下,聪明和美好的含义不是很清楚。请在你所说的什么意思中添加一些细节。例如,它不会很好,因为它添加了重复的代码muzzlator->几乎正确:(father==null?ClassName.OBJECT:father)但非常感谢@谢谢你!我会记住的!。父类(父类==null?类名。对象:父类)这可能是最好的方法,非常感谢!很确定这不会像你写的那样起作用,但是你作为注释写的“inline if”非常有用。谢谢父类(father==null?ClassName.OBJECT:father)很高兴这条评论有帮助。我很困惑,为什么你认为这个答案行不通?我想你知道我用
classbuilder
切换了
,所以你需要声明这个变量,我还用
return
来表示你想用它结束的对象是的,是的,我只是无法让它工作,因为我使用了错误的Builder对象。我提出了一个编辑,包含一个完整的方法,而不是以前的代码,非常感谢你的工具,很高兴你得到它的工作。谢谢你的编辑,我也删除了一些换行
if (father == null) {
  father = ClassName.OBJECT;
}