Итак, у меня есть класс, который реализует Comparable (для краткости у меня есть фиктивный метод)
public class MarkovEntry<T extends Chainable> implements Comparable<MarkovEntry<T>>
{
// Compare two rows by ID
public int compareTo(MarkovEntry<T> e)
{
return 0;
}
}
И метод в другом классе, который принимает Comparable (опять же, фиктивный метод)
public class ArrayOps
{
public static int binSearch(ArrayList<Comparable> list, Comparable c)
{
return 0;
}
}
Тем не менее, когда я пытаюсь вызвать свой метод следующим образом
int index = ArrayOps.binSearch(entries, newEntry);
Где записи представляют собой ArrayList из MarkovEntry, а newEntry - это MarkovEntry, компилятор говорит мне
actual argument java.util.ArrayList<com.company.MarkovEntry<T>> cannot be converted
to java.util.ArrayList<java.lang.Comparable> by method invocation.
Что здесь происходит? MarkovEntry специально реализует Comparable — почему компилятор этого не распознает?
Мой класс Chainable также реализует Comparable, если это как-то связано.