链接构造函数时的Java空参数

kalsowerus:

假设我有一个带有多个构造函数的类,其中一个是复制构造函数(用于复制对象):

public class Rectangle {

    int width, height;

    public Rectangle(int width, int height) {
        this.width = width;
        this.height = height;
    }

    public Rectangle(Rectangle source) {
        this(source.width, source.height);
    }
}

有没有什么办法可以让检查,如果sourcenull在拷贝构造函数和抛出IllegalArgumentException,如果它是什么?因为另一个构造函数调用必须构造函数中的第一条语句。

你说:

你可以这样做:

public Rectangle(Rectangle source) {
     this(checkNotNull(source, "Source cannot be null").width, source.height);
}

private static <T> T checkNotNull(T t, String msg) {
    if (t == null) throw new IllegalArgumentException(msg);
    return t;
}

我也同意乔恩·斯凯特(Jon Skeet)的NullPointerException观点,在这种情况下a 并不是一个坏习惯。唯一的问题是,当获得NPE时,排长队很难识别哪个对象null,这就是为什么更具体的消息有用的原因。

如果您不费吹灰之力,也无法重新发明轮子并使用标准java.util.Objects方法NullPointerException

public Rectangle(Rectangle source) {
     this(Objects.requireNonNull(source, "Source cannot be null").width, source.height);
}

如果错误消息的构建成本很高,则可以提供一个Supplier<String>替代消息,仅在实际需要时才支付构建消息的成本:

 public Rectangle(Rectangle source) {
     this(Objects.requireNonNull(source, () -> explainError(source)).width, source.height);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++ 0/1参数构造函数传递给模板构造函数时未按预期进行链接

构造函数与Java数组链接

尝试在junit4中使用参数时,构造函数中出现空参数

以接口为参数的构造函数链接

Java构造函数空对象

空检查构造函数参数的常规方法

构造函数使用空值作为参数

参数名称不同且构造函数链接仅给出零作为输出时的重复值

参数化构造函数Java

返回“链接”对象时移动构造函数

粘贴链接时参数为空异常

Java构造函数链接和方法参考

关于Java中构造函数链接的困惑

可选参数与空参数方法以及带重载的构造函数

在Java中,在评估emptyConstructor条件时,如何区别对待空类构造函数?

构造函数在调用this(aguments)之前链接并准备参数

java构造函数中的许多参数

带参数的Java私有构造函数

从构造函数Java获取特定参数

Java继承和构造函数参数

构造函数的Java枚举合成参数

(Java入门):构造函数没有参数?

Java数组构造函数参数

使用位置记录构造函数和/或初始化属性时如何检查参数是否为空?

如何忽略在Java调用科特林时的默认值的构造函数的参数?

当具体对象采用不同的构造函数参数时,在Java中为工厂

在构造函数中传递java.lang.Integer的参数时,发生NoSuchMethodException(反射)

创建类型为java.io.File [模糊的构造函数参数类型]的bean时出错

当类构造函数具有参数时,如何在Java中初始化数组?