Eclipse 3.4. Java niveau du compilateur 1.6 JRE IBM 1.6Référence de constructeur ambigu dans javac mais pas dans Eclipse
Nous avons une classe de bibliothèque que nous ne pouvons pas changer qui est de la forme.
import java.util.Hashtable;
public class A extends Hashtable {
...
}
Et nous avons construit une classe utilitaire pour fournir un accès facile à 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;
}
}
Le problème se produit lorsque nous essayons d'appeler l'un des constructeurs d'une autre classe.
public class C {
public void stuff() {
A a = new A();
B b = new B(a);//Error in javac
}
}
Eclipse compile cela sans erreur, et quand il est compilé par javac ant et jenkins le compilateur donne une erreur comme suit.
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);
Cette erreur est-elle survenue dans javac? À mon avis, éclipse est correcte en sélectionnant la méthode plus spécifique.
Etes-vous sûr d'utiliser le même JDK dans Eclipse que pour Java? – dbalakirev
A étend 'HashTable'. Est-ce que ça devrait être "Hashtable"? –
@David correct -> édité –