Javapoet:用更少的代码写同样的东西(addModifiers)
Javapoet: writing the same thing with less line of code (addModifiers)
所以,我有这段代码(使用 Javapoet Lib):
if (myBeautifulBoolean) <--------------------------
theClass = TypeSpec.classBuilder(classe.getName())
.addModifiers(javax.lang.model.element.Modifier.valueOf(classe.getProte().toString().toUpperCase()), Modifier.FINAL) <-------------------
.superclass(father==null?ClassName.OBJECT:father)
.addMethods(methods)
.addFields(fields)
.build();
else
theClass = TypeSpec.classBuilder(classe.getName())
.addModifiers(javax.lang.model.element.Modifier.valueOf(classe.getProte().toString().toUpperCase())) <------------------
.superclass(father==null?ClassName.OBJECT:father)
.addMethods(methods)
.addFields(fields)
.build();
我希望它变成这样的:
theClass = TypeSpec.classBuilder(classe.getName())
.addModifiers(javax.lang.model.element.Modifier.valueOf(classe.getProte().toString().toUpperCase()), myBeautifulBoolean?Modifier.FINAL:null) <----------
.superclass(father==null?ClassName.OBJECT:father)
.addMethods(methods)
.addFields(fields)
.build();
问题出在哪里?
如果我写 myBeautifulBoolean?Modifier.FINAL:null,我会得到一个异常,因为 addmodifiers() 的参数不能为空,并且没有像 Modifier.NOTFINAL
那么,有没有办法告诉代码"Ehi, if the boolean is true, add an argument, if not, don't"?
addModifiers 接受一个数组。你可以做 addModifiers(test ? new Modifier[] { mod, Modifier.FINAL} : new Modifier[] { mod })
你可以用辅助方法使它更漂亮
public static <T> T[] arr(T... array) { return array; }
// later
.addModifiers(test ? arr(mod, FINAL) : arr(mod))
所以,我有这段代码(使用 Javapoet Lib):
if (myBeautifulBoolean) <--------------------------
theClass = TypeSpec.classBuilder(classe.getName())
.addModifiers(javax.lang.model.element.Modifier.valueOf(classe.getProte().toString().toUpperCase()), Modifier.FINAL) <-------------------
.superclass(father==null?ClassName.OBJECT:father)
.addMethods(methods)
.addFields(fields)
.build();
else
theClass = TypeSpec.classBuilder(classe.getName())
.addModifiers(javax.lang.model.element.Modifier.valueOf(classe.getProte().toString().toUpperCase())) <------------------
.superclass(father==null?ClassName.OBJECT:father)
.addMethods(methods)
.addFields(fields)
.build();
我希望它变成这样的:
theClass = TypeSpec.classBuilder(classe.getName())
.addModifiers(javax.lang.model.element.Modifier.valueOf(classe.getProte().toString().toUpperCase()), myBeautifulBoolean?Modifier.FINAL:null) <----------
.superclass(father==null?ClassName.OBJECT:father)
.addMethods(methods)
.addFields(fields)
.build();
问题出在哪里? 如果我写 myBeautifulBoolean?Modifier.FINAL:null,我会得到一个异常,因为 addmodifiers() 的参数不能为空,并且没有像 Modifier.NOTFINAL
那么,有没有办法告诉代码"Ehi, if the boolean is true, add an argument, if not, don't"?
addModifiers 接受一个数组。你可以做 addModifiers(test ? new Modifier[] { mod, Modifier.FINAL} : new Modifier[] { mod })
你可以用辅助方法使它更漂亮
public static <T> T[] arr(T... array) { return array; }
// later
.addModifiers(test ? arr(mod, FINAL) : arr(mod))