代码之家  ›  专栏  ›  技术社区  ›  kingledion

如何处理用null初始化的构造函数?

  •  -1
  • kingledion  · 技术社区  · 6 年前

    让我们来上课 A B 具体如下:

    public class B {
    
        private int anInt;
        private String aString;
        ...
    
        public B(A initObj) {
           anInt = initObj.getIntField();
           aString = initObj.getStringField();
           ...
        }
    
        ...
    }
    

    如果initObj是 null ,那么最有意义的是 according to the internet ,Java构造函数不能返回空值。

    显然,最好检查调用构造函数的代码 以免用空参数调用构造函数。但是,假设这种可能性发生了,什么是优雅地处理这种情况的最佳方法。

    无效的 ?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Ravindra Ranwala    6 年前

    一种方法是使用 Objects.requireNonNull(initObj) NullPointerException 如果A实例是 null .

    public B(A initObj) {
        Objects.requireNonNull(initObj);
        anInt = initObj.getIntField();
        aString = initObj.getStringField();
    }
    

    或者,如果A为空时确实需要返回null,则可以使用静态工厂。下面是它在实践中的样子。

    public static Optional<B> createB(A initObj) {
        if (initObj == null)
            return Optional.empty();
    
        return Optional.of(new B(initObj));
    }
    

    注意,返回 Optional 会给你的客户留下这样的印象:你的方法返回的值可能是空的,需要显式地处理这种情况。

        2
  •  0
  •   John Camerin    6 年前

    根据您希望在应用程序中发生的事情,您有两个选项。 构造函数还可以对initObj执行空检查,如果B的字段是有效状态,则不初始化该字段;如果B的字段确实无效,则引发异常。