在 JavaPoet 中使用继承的聪明方法
Smart way to use inheritance in JavaPoet
我正在尝试以这种方式构建一个 class(使用 JavaPoet 库):
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();
其中字段"father"可以什么都没有。我尝试使用将 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 会做正确的事。
我正在尝试以这种方式构建一个 class(使用 JavaPoet 库):
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();
其中字段"father"可以什么都没有。我尝试使用将 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 会做正确的事。