Я пытаюсь понять, как java имеет дело с двусмысленностями в вызовах функций. В следующем коде вызов method неоднозначен, но method2 нет!!!.
Я чувствую, что оба являются двусмысленными, но почему это компилируется, когда я прокомментирую вызов method? Почему method2 не является двусмысленным?
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: Это появилось в комментариях: ряд IDE сообщают, что они так неоднозначны - IntelliJ и Netbeans. Однако он компилируется просто отлично из командной строки/maven.