2017-03-27 1 views
-1

So habe ich diesen Code (mit dem Javapoet Lib):Javapoet: das gleiche mit weniger Codezeile schreiben (addModifiers)

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

, und ich will es, etwas werden wie:

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

Wo ist das Problem? wenn ich schreibe myBeautifulBoolean Modifier.FINAL: null, erhalte ich eine Ausnahme, da die Parameter von addmodifiers() nicht null sein kann, und es gibt nichts, wie Modifier.NOTFINAL

So ist es eine Möglichkeit, das zu sagen, Code "Ehi, wenn der Boolesche Wert wahr ist, füge ein Argument hinzu, wenn nicht, nicht"?

Antwort

2

addModifiers nimmt ein Array. Sie könnten addModifiers(test ? new Modifier[] { mod, Modifier.FINAL} : new Modifier[] { mod }) tun, könnten Sie dies hübscher mit einer Hilfsmethode

public static <T> T[] arr(T... array) { return array; } 

// later 
    .addModifiers(test ? arr(mod, FINAL) : arr(mod)) 
machen