忽略带有 null 的属性(哈希表)值

Ignore properties(Hashtable) value with null

我有一个接受 java.util.Properties 参数的方法,

我需要放各种参数,它的值可以为null。

我收到 NullPointerException 因为 Hashtable.put 无法接收空值

java.lang.NullPointerException
        at java.util.Hashtable.put(Hashtable.java:460)
        ...

我可以使用检查空值的方法修复它:

private void putIfNotNull(Properties p, String name, String value) {
    if (value!= null) {
        p.put(name, value);
    }
}

或者创建一个包装器 class 并使用它:

public class PropertyHolder extends Properties {
 @Override
    public Object put( Object key, Object value ) {
    if (value != null) {
        return super.put(key, value);           
    }
    return null;
}

并使用类似 属性:

Properties p = new PropertyHolder();

第二个选项正确吗?还是解决方案中有 simpler/built?

putIfNotNull 方法是一个更好的选择,因为它明确表示如果值为 null 则不会放入该值。创建一个 Properties 的子类,它在 put 方法中默默地拒绝空值意味着破坏 Maps 的预期行为 - 如果 put("key", value) returns 没有抛出异常,那么 get( "key") 应该 return 同样 value.