public class Main {
public static void main(String[] args) {
Integer [] iArray = {11, 22, 33, 44, 55};
String[] sArray = {"Mike", "Soffie", "Flippy", "Digital"};
print(iArray);
print(sArray);
}
public static <Integer> void print(Integer[] array){
for(Integer x: array){
System.out.println(x);
}
}
}
Я не пойму почему при вызове метода print куда мы ложим sArray строковый массив, когда в самом методе указано, что он будет принимать Integer массив, а не строковый, он всё равно отрабатывает (строковый)
Ведь если мы сделаем так:
List<Integer> list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
То если мы введем list.add("Hello"), то у нас сразу подчеркнет и скажет мол тут Integer, а не String, так же и в моём примере я хочу понять, почему компилятор не ругается
В коде вашего метода
public static <Integer> void print(Integer[] array){
for(Integer x: array){
System.out.println(x);
}
}
словом Integer обозначен не стандартный java.lang.Integer, а тип-параметр. Такому параметру можно дать любое имя, точно так же, как параметру метода можно дать имя существующей вне этого метода переменной:
int myName;
void myMethod(double myName) {
System.out.println(myName)
}
В вашем примере параметр назван Integer, видимо, специально, чтобы вас запутать. С таким же успехом метод может быть записан как
public static <T> void print(T[] array){
for(T x: array){
System.out.println(x);
}
}
по смыслу это абсолютно идентичная запись. Такая запись просто означает, что в качестве параметра это метод может получать массив объектов любого типа, а в цикле for выбирает из массива объекты этого же типа и передает их в качестве параметра методу System.out.println(). Таким образом, этому методу можно передавать и Integer[], и String[], и Object[] -- любые массивы с элементами объектных типов.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости