Параметризированные типы и мой пример

125
03 ноября 2019, 16:10
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, так же и в моём примере я хочу понять, почему компилятор не ругается

Answer 1

В коде вашего метода

  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[] -- любые массивы с элементами объектных типов.

READ ALSO
Настройка Netbeans для JDK 11

Настройка Netbeans для JDK 11

В Netbeans 10 при открытии проекта показывает синтаксические ошибки:

145
Java FX .jar приложение не запускается

Java FX .jar приложение не запускается

Здраствуйте, написал javafx приложение, в idea прекрасно компилится, но когда формирую executable jar, не запускаетсяПри запуске через консоль видает...

180
ArrayList &lt;ArrayList &lt;Integer&gt;&gt;

ArrayList <ArrayList <Integer>>

Как правильно добавлять элементы к списку типа

157
Как проинициализировать объекты enum вне класса

Как проинициализировать объекты enum вне класса

1Почему в конструктор объекта Enum нельзя передать значение позже (не в самом классе где он автоматически создается)?

168