Eclipse 3.4. Java compilador nivel 1.6 JRE IBM 1.6Referencia de constructora ambigua en javac pero no en Eclipse
Tenemos una clase de biblioteca que no podemos cambiar que es de la forma.
import java.util.Hashtable;
public class A extends Hashtable {
...
}
Y hemos construido una clase de utilidad para facilitar el acceso a A.
public class B {
private A a;
public B() {
this.a = new A();
}
public B(final A props) {
this.a = props;
}
public B(final Map<String, String> props) {
this();
for (String key : props.keySet()) {
add(key, props.get(key));
}
}
@SuppressWarnings("unchecked")
public B add(final String name, final Object value) {
a.put(name, value);
return this;
}
}
El problema se produce cuando tratamos de llamar a uno de los constructores de otra clase.
public class C {
public void stuff() {
A a = new A();
B b = new B(a);//Error in javac
}
}
Eclipse compila esto sin errores, y cuando se compila a través javac hormiga y Jenkins el compilador da un error como el siguiente.
reference to B is ambiguous, both method B(com.foo.A) in com.bar.B and method B(java.util.Map<java.lang.String,java.lang.String>) in com.bar.B match
[javac] B b = new B(a);
¿Debería ocurrir este error en javac? En mi opinión, eclipse es correcto al seleccionar el método más específico.
¿Estás seguro de que estás utilizando el mismo JDK dentro de Eclipse que para Java? – dbalakirev
A extiende 'HashTable'. ¿Debería ser 'Hashtable'? –
@David correcto -> editado –