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