2017-03-27 1 views
-1

Donc, j'ai ce code (en utilisant le Javapoet Lib):Javapoet: écrire la même chose avec moins ligne de code (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(); 

et je veux qu'elle devienne quelque chose comme:

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

Où est le problème? si j'écris myBeautifulBoolean Modifier.FINAL: null, je reçois une exception parce que les paramètres de addmodifiers() ne peut pas être nulle, et il n'y a rien comme Modifier.NOTFINAL

Alors, est-il un moyen de dire code "Ehi, si le booléen est vrai, ajouter un argument, sinon, ne pas"?

Répondre

2

addModifiers prend un tableau. vous pourriez faire addModifiers(test ? new Modifier[] { mod, Modifier.FINAL} : new Modifier[] { mod }) vous pourriez faire ce plus joli avec une méthode d'assistance

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

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