Список
Коли ви вводите список у ваш метод searchList (), ви передаєте його через параметр Object. Це означає, що в межах searchList() єдиними методами, які можна викликати, є ті, що визначені для Object, навіть якщо список у вашому виклику до searchList() дійсно є деяким певним списком. У деякому сенсі список ваших параметрів "вичерпав" список параметрів списку.
Що потрібно зробити, як вже згадувалося, це змінити параметр на Колекцію або Список. Таким чином, у вашому методі searchList (), компілятор Java знає, що параметр "list" дійсно є списком, і тому дійсно є метод content ().
Зауважте, що список також є інтерфейсом, і він включає інтерфейс Collection, розширюючи його. Тому кожен клас, який реалізує інтерфейс List, повинен забезпечити методи в Collection, а також додаткові методи List. Чи слід використовувати список або колекцію? Моя думка - використати найменший обмежений вибір. Схоже, що ваш пошуковий список() використовує лише contains (), так що насправді він буде працювати на будь-якому застосуванні колекції, зокрема, наприклад, Налаштувати .
Тому я б перейменував ваш метод з посилання на те, де ви шукаєте (всередині списку), до того, що ви шукаєте (наступна лінія).
public void searchForNextLine(Scanner scan, Collection lines){
System.out.println("Search for element:\t");
String p = scan.nextLine();
if (lines.contains(p))
System.out.println(p + " is in the collection of lines");
else
System.out.println(p + " is not in the collection of lines.");
}
Тепер, скажімо, ви впровадили свій список за допомогою ArrayList . Пізніше ви передумаєте, вирішивши, що TreeSet краще Цей метод searchForNextLine() продовжуватиме працювати, оскільки і TreeSet, і ArrayList є реалізаціями Collection. Ще краще, якщо ви вирішите скласти свій клас списку (і ви впевнені, що хочете отримати справжній список, а не якийсь інший сорт колекції), то до тих пір, поки ви реалізуєте інтерфейс списку, ви будете змушені надавати contains() (тому що ви також будете реалізовувати інтерфейс Collection як частину реалізації інтерфейсу List), і ви можете передавати об'єкт вашого нового класу в searchForNextLine (), впевнений, що він буде чудово працювати без будь-яких змін .
public class MyListClass implements List {
//all the methods required to implement a List interface
}