首页 > 解决方案 > java中调用构造函数时如何忽略null

问题描述

这是我的代码。我尝试返回包含不同参数的对象。

public class A{

 ResponseObj responseObj = null;
 public ResponseObj test(){
    if(something){
       responseObj = new ResponseObj("k","l");
    }
    else{
       responseObj = new ResponseObj("x","y","z");
   }
 }

 return responseObj;
}

使用两个构造函数创建了 ResponseObj 类。

public class ResponseObj{

   String a;
   String b;
   String c;
   String d;

   public ResponseObj(String a, String b){
     this.a = a;
     this.b = b;
   }
   public ResponseObj(String a, String b,String c){
     this.a = a;
     this.b = b;
     this.c = c;
   }

}

如果条件通过,

a:"k",
b:"l",
c:null,
d:null

通过 else 条件通过,

a:"x",
b:"y",
c:"z",
d:null

但我需要从输出中删除空值

输出

调用 if 条件,

a:"k",
b:"l",

调用 else 条件,

a:"x",
b:"y",
c:"z"

如果这不是正确的方法,请通知我。谢谢

标签: java

解决方案


删除由其他方法执行的显示值不是构造函数的作用。
对象有一个状态,而null字段是这个状态的一部分。
您正在寻找的是实现一种仅输出非null字段的方法。

尝试类似:

public class ResponseObj {
   ...
    public void displayNotNullValues(){
       StringBuilder finalMsg = new StringBuilder();
       appendIfNotNull(finalMsg, "a", a);
       appendIfNotNull(finalMsg, "b", b);
       appendIfNotNull(finalMsg, "c", c);
       appendIfNotNull(finalMsg, "d", d);
       System.out.println(finalMsg.toString());
    }

    private void appendIfNotNull(StringBuilder finalMsg, String name, String value){
       if (value != null){
          if (finalMsg.length()>0){
            finalMsg.append(",");
            finalMsg.append("\n");
          }
         finalMsg.append(name + " : ");
         finalMsg.append("\"");
         finalMsg.append(value);
         finalMsg.append("\"");
       } 
    }
}

使用示例:

new ResponseObj("k","l").displayNotNullValues();
System.out.println("----");
new ResponseObj("x","y","z").displayNotNullValues();

输出 :

一个:“k”,

b:“l”


一个:“x”,

经过”,

c:“z”


推荐阅读