【问题标题】:Javapoet: writing the same thing with less line of code (addModifiers)Javapoet:用更少的代码写同样的东西(addModifiers)
【发布时间】:2017-03-28 20:13:04
【问题描述】:

所以,我有这段代码(使用 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,如果布尔值是真的,添加一个参数,如果不是,不要”?

【问题讨论】:

    标签: java javapoet


    【解决方案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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      相关资源
      最近更新 更多