考虑以下代码
public class Foo
{
int value;
public Foo (final String str, Object ... bug)
{
System.out.println ("Should work! 1");
}
public Foo (final String str, final int value, Object ... bug)
{
this.value = value;
System.out.println ("Should work! 2");
}
public static void main (String[]args)
{
Foo f = new Foo ("Foo", 3); //Line 14
System.out.println(f.value);
}
}
当我使用 jdk-1.6.x 时,我成功地编译了它。但是在升级到 jdk-1.7 时它给了我错误:
Foo.java:18: error: reference to Foo is ambiguous, both constructor Foo(String,Object...) in Foo and constructor Foo(String,int,Object...) in Foo match
Foo f = new Foo ("Foo", 3); //Line 14
所以为了避免这个错误,我将第二个 Ctor 更改为
public Foo (final String str, final Integer value, Object ... bug)
{
this.value = value;
System.out.println ("Should work! 2");
}
这样它就可以自动装箱为 Integer 并跳过编译错误。
几个问题:
1)这是一个好习惯吗?如果没有那么还有其他方法吗?
2)为什么java开发人员会决定给出错误而不是允许它?