Перегрузка того же метода для печати другого типа данных arraylist

#java #compiler-errors #overloading

#java #ошибки компилятора #перегрузка

Вопрос:

Моя задача — перегрузить один и тот же метод, чтобы иметь возможность использовать одно и то же имя метода для вывода на экран содержимого обоих списков массива.

Ниже приведен мой код, который я пробовал. Но это не работает, потому что оба метода имеют одинаковое имя?

 import java.util.ArrayList;

public class Tutotrial_2_1 {

public static void main(String[] args){
    //Creating integer type array list
    ArrayList<Integer>listOfAges = new ArrayList<Integer>();
    //Adding items to array list
    listOfAges.add(25);
    listOfAges.add(36);
    listOfAges.add(45);
    listOfAges.add(67);
    listOfAges.add(87);
    listOfAges.add(32);
    listOfAges.add(33);
    listOfAges.add(45);
    
    //Creating double type array list
    ArrayList<Double>listOfMarks = new ArrayList<Double>();
    //Adding items to array list
    listOfMarks.add(25.4);
    listOfMarks.add(36.5);
    listOfMarks.add(4.45);
    listOfMarks.add(55.67);
    listOfMarks.add(55.7);
    listOfMarks.add(32.0);
    listOfMarks.add(33.0);
    listOfMarks.add(45.0);
    
    //Calling display function of integer array
    displayArray(listOfAges);
    displayArray(listOfMarks);
}

//Display fucntion of listOfAges array
public static void displayArray(ArrayList<Integer>list){
    for(Integer indexes : list){
        System.out.println(indexes);
    }
}
public static void displayArray(ArrayList<Double>list){
    for(Double indexes : list){
        System.out.println(indexes);
    }
}
  

}

Комментарии:

1. Что именно не работает? Можете ли вы поделиться своим полным стеком ошибок? Также, пожалуйста, сделайте пробел в ArrayList<Double> list и ArrayList<Integer> list

2. ошибка: столкновение имен: displayArray(ArrayList<Double>) и displayArray(ArrayList<Integer>) имеют одинаковое удаление

Ответ №1:

Из-за стирания типов Java вы не можете перегрузить метод поверх универсального типа. Другими словами, у вас есть два метода, которые разрешают displayArray(ArrayList) , поэтому вы получите ошибку компиляции для дважды объявленного метода.

К счастью, здесь вам не нужен перегруженный метод — поскольку у любого объекта в Java есть toString метод, у вас может быть только один метод, который получает список, выполняет итерации по нему и печатает каждый элемент:

 public static void displayArray(List<?> list){
    for (Object indexes : list) {
        System.out.println(indexes);
    }
}
  

Ответ №2:

Если я понимаю вашу проблему, если вы измените свой метод следующим образом:

 public static void main(String[] args) {
  //Creating integer type array list
  ArrayList<Integer> listOfAges = new ArrayList<Integer>();
  //Adding items to array list
  listOfAges.add(25);
  listOfAges.add(36);
  listOfAges.add(45);
  listOfAges.add(67);
  listOfAges.add(87);
  listOfAges.add(32);
  listOfAges.add(33);
  listOfAges.add(45);

  //Creating double type array list
  ArrayList<Double>listOfMarks = new ArrayList<Double>();
  //Adding items to array list
  listOfMarks.add(25.4);
  listOfMarks.add(36.5);
  listOfMarks.add(4.45);
  listOfMarks.add(55.67);
  listOfMarks.add(55.7);
  listOfMarks.add(32.0);
  listOfMarks.add(33.0);
  listOfMarks.add(45.0);

  //Calling display function of integer array
  displayArray(listOfAges);
  displayArray(listOfMarks);
}

//Display function of listOfAges array
public static <T> void displayArray(ArrayList<T>list){
  for(T indexes : list){
    System.out.println(indexes);
  }
}
  

Это должно сработать. Используется как универсальный тип.