Javapoet: писать то же самое с меньшим количеством строк кода (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

Итак, есть ли способ сказать коду: "Эхи, если логическое значение истинно, добавить аргумент, если нет, нет"?

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))
Другие вопросы по тегам