我知道,如果我在 Java 中有一个可以接受几种不同类型参数的重载方法,并且我想传递null
给该方法,我需要将其显式转换为一种接受的类型。我的问题是,是否可以null
从方法本身中选择调用哪个版本的方法(例如,通过添加另一个重载来处理null
)?
我的问题如下 - 我有一个带有一个接受一个参数的重载构造函数的类:
public class MyClass {
public MyClass(A arg) {
// do something
}
public MyClass(B arg) {
// do something else
}
}
用例是这样的,如果类是用 a 构造的null
,那么只有构造函数的第二个版本才有意义。但是new MyClass((B)null)
每次都必须这样做很容易出错。如果我不小心使用了转换 to A
,则会执行错误的构造函数。而且我也不能在我的A
构造函数中引入以下检查:
if (arg == null) {
this((B)arg);
}
因为this(...)
不是第一个声明。当然,我可以在此检查中复制构造函数中的代码B
,或者引入另一种方法来执行B
构造函数所做的事情,然后从构造函数内部和此检查中调用它,但这看起来不像“干净”解决方案(并且可能并不总是可能的,例如在级联构造函数的情况下)。
有没有办法让我只需要每次都执行构造函数new MyClass(null)
的版本?B
我试图添加这个重载,但编译器抱怨:
public MyClass(null arg) {
this((B)arg);
}