繁体   English   中英

作为参数传递后检查空对象

[英]Check null objects after passes as parameter

我需要检查某些对象是否为空,我想知道是否有更简单的解决方案来解决我的问题。

基本上,我需要将一些值放入hashMap中,但某些值引用可能为null。

为了解决这个问题,我有以下几点

if (object1.data != null) {
   map.put("key1",object1.data.value);
} else {
   map.put("key1","NA");
}
if (object2.data != null) {
   map.put("key2",object2.data.value);
} else {
   map.put("key2","NA");
}
if (object1.otherData!= null) {
   map.put("key3",object1.otherData.value);
} else {
   map.put("key3","NA");
}
if (otherObject.otherData != null) {
   map.put("key4",otherObject.otherData.otherValue);
} else {
   map.put("key4","NA");
}

而且我还需要向地图添加更多的值,所有值都是字符串,但是对象和数据是不同的。 如您所见,这是检查Data是否不为null的简单方法,我将获取其值,但是我需要对1000多个值进行此操作。

我在想类似的东西:

public String getValue(Object myObject) {
if (myObject == null) {
return "NA"; 
} else {
return myObject;
}
}

and call it like:

map.put("key1",getValue(object1.data.value));  // this of course wont work, when data is null

有人知道我该如何改善吗? 我尝试过三次,但它不是很可读。 我正在寻找其他解决方案(如果可能)。

谢谢

三元运算符在我看来很整洁:

public String getValue(Data data){
    return Objects.nonNull(data)?data.value?"NA";
}

并如下所示使用它:

map.put(key, getValue(object.data));

您可以编写地图包装器并在其中封装逻辑,例如:

public class ExampleWrapper {

    private final Map<String, String> map;

    public ExampleWrapper() {
        this.map = new HashMap<>();
    }

    public void putIfDataNotNull(String key, String data) {
        if (data != null) {
            map.put(key, data);
        }
    }

    public String get(String key) {
        return map.getOrDefault(key, "NA");
    }
}

或者您可以在检查null值后立即输入"NA"

您也可以编写这样的重载方法:

public void putIfDataNotNull(String key, Data1 data) {
    if (data.getValue() != null) {
        map.put(key, data.getValue());
    }
}

public void putIfDataNotNull(String key, Data2 data) {
    if (data.getAnotherValue() != null) {
        map.put(key, data.getAnotherValue());
    }
}

但是很多事情取决于您的下一个逻辑。 您如何使用此地图 ,以及具体需要什么。 地图有什么作用?

也许改为发送data ,因为您担心的可能是null。

public String getValue(Data data) {
    if (data == null) {
        return "NA"; 
    } else {
        return data.value;
    }
}

并这样称呼:

map.put("key1", getValue(object1.data));

也许您想这样做:

map.put("key1", object1.data != null ? object1.data.value : "NA";

我看到您直接访问对象的成员,但是如果可以添加getter,则可以执行以下操作:

public static String getOrDefault(Supplier<Data> supplier) {
    Data data = supplier.get();
    return data == null ? "NA" : data.value;
}

然后安全地填充地图:

map.put("key1", getOrDefault(object1::getData));
map.put("key2", getOrDefault(object2::getOtherData));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM