Рассмотрим следующий пример кода:
public class TestClass {
public void doSth(String str, String l, Object... objects) {
System.out.println("A");
}
public void doSth(String str, Object... objects) {
System.out.println("B");
}
}
Когда я теперь звоню new TestClass().doSth("foo", "bar"), я получаю ожидаемый результат A. Но если я изменил сигнатуру метода первого метода, отвечая параметру l на примитивный тип:
public class TestClass {
public void doSth(String str, long l, Object... objects) {
System.out.println("A");
}
public void doSth(String str, Object... objects) {
System.out.println("B");
}
}
вызов new TestClass().doSth("foo", 2L) приведет к ошибке времени компиляции reference to call ambiguous.
Я подумал об этом один в течение некоторого времени, а также проконсультировался с qaru.site/info/237063/..., но я не смог понять, почему это происходит. По-моему, doSth("foo", 2L) более специфичен для подписи doSth(String string, long l, Object... obj) и должен позволить компилятору также прийти к такому выводу.