Рассмотрим следующий код:
public class OverloadTest {
void print(Integer i){
System.out.println("Integer");
}
void print(long i){
System.out.println("long");
}
public static void main(String[] args) {
OverloadTest overloadTest = new OverloadTest();
overloadTest.print(3);
}
}
Будет вызван метод, принимающий тип long, т.к. продвижение типов следующее:
int > long > float > double > Integer > Number > Object
Рассмотрим тот же самый пример, только в качестве параметра передадим массив переменной длины того же типа:
public class OverloadTest {
void print(Integer...i){
System.out.println("Integer");
}
void print(long...i){
System.out.println("long");
}
public static void main(String[] args) {
OverloadTest overloadTest = new OverloadTest();
overloadTest.print(3);
}
}
Данный код завершится ошибкой времени выполнения:
Error:(11, 21) java: reference to print is ambiguous
both method print(java.lang.Integer...) in OverloadTest and method print(long...) in OverloadTest match
Почему теперь вызов неоднозначен и правила продвижения типов для массива переменной длины не работают?
Перечисляемый тип не указан в списке продвижения, поэтому компилятор определяет, что оба метода подходят для вызова и выдает ошибку.
Виртуальный выделенный сервер (VDS) становится отличным выбором
У меня есть EditText большой длины (около 100 строк), мне надо сделать так, чтобы при нажатии на нужную строку она двигалась так, чтобы она была видна...
Столкнулся с задачей вывода текущей версии приложения, расположенного в репозитории gitСовпадает ли хеш ветки master с хешем последнего коммита...
После команды create-react-app MyApp командная строка пишет, что 'command not found', хотя должен запуститься процесс создания приложения на React