所以我有一个实现了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);
如果entries是一个MarkovEntry的ArrayList,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,如果这有任何关系的话。
int binarySearch(ArrayList<? extends Comparable> list)
。 - fabianComparable
不需要加参数吗? - awksp<T extends Comparable<? super T>>
。 - newacctbinSearch(ArrayList<? extends Comparable<?>> list)
不会是类型安全的。 - newacct