忽略带有 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
.
我有一个接受 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
.