重载构造函数歧义

时间:2009-04-06 09:35:14

标签: java

我正在尝试在Java中使用可以接受int[]String的重载构造函数。我收到编译错误,这似乎表明,如果变量是null字符串或null数组,则在此构造函数中调用将是不明确的。

有一个简单的方法吗?

4 个答案:

答案 0 :(得分:16)

将参数转换为以下类型之一:

Foo f1 = new Foo((int[]) null);
// or
Foo f2 = new Foo((String) null);

答案 1 :(得分:5)

最简单的方法 - 避免null。如果它是空的String使用"";空int[]使用new int[]

要回答这个问题,您可以使用强制转换或为变量指定null:

new MyClass((String)null)

final String nullString = null;
new MyClass(nullString)

前者通常是首选,如果您打算这样做的话。

答案 2 :(得分:4)

也许你可以添加一个没有参数的构造函数。

答案 3 :(得分:2)

如果您控制了要实例化的类,请考虑使用静态工厂方法,以便为它们提供两个单独的名称,以避免与重载相关的混淆。

public static Foo createFromIntArray(final int[] ints) { ... }
public static Foo createFromString(final String str) { ... }

否则,决定你的null代表什么:它是一个int数组的空数组,还是一个空字符串?你正在构建的类可能会因为一个而不是另一个而表现出不同的行为。一旦你知道你的null代表什么,只需在构造函数的调用中将它强制转换为该类型。

new Foo((String) null);
new Foo((int[]) null);

最后,听起来您可能正在将对象引用传递给此构造函数而不是显式null。也许你从java.util.Map得到的东西。如果是这样,您可以使用instanceof测试此对象,并在将其发送到相关构造函数之前强制转换为适当的类型。

相关问题