2016-02-04 3 views
0

У меня есть два ArrayLists:Почему не compareTo() работает?

ArrayList<String> testList = new ArrayList<>(); 
ArrayList<String> wordList = new ArrayList<>(); 

Они в настоящее время передается в метод:

public static void binSearch(ArrayList a1, ArrayList a2) 

Внутри метода, я хочу, чтобы сравнить строки между двумя ArrayList:

a1.get(i).compareTo(a2.get(newEnd/2)) 

Однако я получил сообщение об ошибке:

cannot find symbol 
symbol: method compareTo(Object) 
location: class Object 

Я слышал, что некоторые люди говорят, что мне нужно реализовать/расширять Comparable, но похоже, что некоторые люди просто отлично справляются с этим методом без импорта/реализации/расширения чего-либо.

+0

Что newEnd? – Abdelhak

+1

'ArrayList' (без generics) не реализует' Comparable' (или имеет метод, называемый 'compareTo (Object)'. Вам либо нужно предоставить собственный компаратор, либо изменить свою подпись метода на нечто большее, чем 'public static void binSearch (ArrayList a1, ArrayList a2) ' – MadProgrammer

+0

@abdelhak newEnd - это int, который содержит индекс для ArrayList, потому что это метод, который выполняет двоичный поиск –

ответ

5

Не используйте необработанные типы. Объявить свой binSearch таким образом:

public static void binSearch(ArrayList<String> a1, ArrayList<String> a2) 

Или, если вы хотите, чтобы поддерживать любые типы Comparable ввести общую переменную типа:

public static <T extends Comparable<? super T>> void binSearch(List<T> a1, List<T> a2) 
+0

Большое вам спасибо! Это именно то, что я искал, и он работает отлично. –