J'essaie de comprendre comment Java traite les ambiguïtés dans les appels de fonction. Dans le code suivant, l'appel à method
est ambiguë, mais method2
n'est pas ! !!.
Je pense que les deux sont ambigus, mais pourquoi cela compile-t-il lorsque je commente l'appel à method
? Pourquoi le method2
n'est pas non plus ambiguë ?
public class A {
public static <K> List<K> method(final K arg, final Object... otherArgs) {
System.out.println("I'm in one");
return new ArrayList<K>();
}
public static <K> List<K> method(final Object... otherArgs) {
System.out.println("I'm in two");
return new ArrayList<K>();
}
public static <K, V> Map<K, V> method2(final K k0, final V v0, final Object... keysAndValues) {
System.out.println("I'm in one");
return new HashMap<K,V> ();
}
public static <K, V> Map<K, V> method2(final Object... keysAndValues) {
System.out.println("I'm in two");
return new HashMap<K,V>();
}
public static void main(String[] args) {
Map<String, Integer> c = A.method2( "ACD", new Integer(4), "DFAD" );
//List<Integer> d = A.method(1, "2", 3 );
}
}
EDIT : Ceci est apparu dans les commentaires : Un certain nombre d'IDEs signalent les deux comme ambigus - IntelliJ et Netbeans jusqu'à présent. Cependant, il compile très bien en ligne de commande/maven.