#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);
}
}
Это должно сработать. Используется как универсальный тип.