Javapoet:用更少的代码行编写相同的东西(addModifiers)

时间:2017-03-27 21:45:44

标签: java javapoet

所以,我有这个代码(使用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()的参数不能为null,并且没有像Modifier.NOTFINAL

那么,有没有办法告诉代码&#34; Ehi,如果布尔值为真,则添加一个参数,如果没有,请不要&#34;?

1 个答案:

答案 0 :(得分:1)

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))