【发布时间】:2012-11-12 00:25:07
【问题描述】:
我知道,如果我在 Java 中有一个可以接受几种不同类型参数的重载方法,并且我想将 null 传递给该方法,我需要将其显式转换为一种接受的类型。我的问题是,是否可以从方法本身中选择在null 上调用哪个版本的方法(例如,通过添加另一个重载来处理null)?
我的问题如下 - 我有一个带有一个接受一个参数的重载构造函数的类:
public class MyClass {
public MyClass(A arg) {
// do something
}
public MyClass(B arg) {
// do something else
}
}
用例是这样的,如果类是用null 构造的,那么只有构造函数的第二个版本才有意义。但是每次都必须做new MyClass((B)null) 很容易出错。如果我不小心使用了对A 的强制转换,则会执行错误的构造函数。而且我也不能在我的A 构造函数中引入以下检查:
if (arg == null) {
this((B)arg);
}
因为this(...) 不是第一个语句。当然,我可以在此检查中复制 B 构造函数中的代码,或者引入另一种方法来执行 B 构造函数所做的事情,然后从构造函数内部和此检查中调用它,但这不是似乎是一个“干净”的解决方案(并且可能并不总是可行,例如在级联构造函数的情况下)。
有没有办法让我只需要 new MyClass(null) 并且每次都执行 B 版本的构造函数?
我试图添加这个重载,但编译器抱怨:
public MyClass(null arg) {
this((B)arg);
}
【问题讨论】:
-
有一个调用
this((B)null)的无参数构造函数? -
@Kevin 这适用于我的情况,但不适用于单参数构造函数级联到多参数构造函数的情况。
标签: java constructor null ambiguous disambiguation