我正在尝试在Java中使用可以接受int[]
或String
的重载构造函数。我收到编译错误,这似乎表明,如果变量是null
字符串或null
数组,则在此构造函数中调用将是不明确的。
有一个简单的方法吗?
答案 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
测试此对象,并在将其发送到相关构造函数之前强制转换为适当的类型。