代码之家  ›  专栏  ›  技术社区  ›  Ori Marko

忽略空的属性(哈希表)值

  •  0
  • Ori Marko  · 技术社区  · 6 年前

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

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

    我得到了 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);
        }
    }
    

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

    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();
    

    第二种选择是正确的吗?还是有一个更简单/内置的解决方案?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Leo Aso    6 年前

    这个 putIfNotNull 方法是一个更好的选项,因为它清楚地表明,如果值为空,它将不放置该值。创建的子类 Properties 它无声地拒绝 put 方法意味着打破映射的预期行为-if put("key", value) 返回而不引发异常,那么get(“key”)应该返回相同的 value 是的。