2017-01-31 12 views
0
ArrayList<ShipDetail> detailArray = new ArrayList<ShipDetail>(Arrays.asList(shipDetail)); 
Sorter.QuickSort(detailArray); 

И это мой класс сортировщика, в котором я пытался выполнить некоторые алгоритмы.значение переменной вывода T имеет несовместимые границы Ошибка

public class Sorter 
{ 
    public static<T extends Comparable<T>> void QuickSort(AbstractList<T> collection) 
    { 
     quickSort(collection,0,collection.size()-1); 
    } 

} 

Но при компиляции я получаю следующее сообщение об ошибке:

требуется: AbstractList найдено: ArrayList Причина: статистических выводов переменной T несовместимый окаймляет ограничения равенства: ShipDetail верхние границы: Сопоставимые где T является переменной типа: T extends Сопоставимый, объявленный в методе QuickSort (AbstractList)

+2

Является ли 'ShipDetail' сопоставимым с самим собой? Это необходимо (примечание '') – mszymborski

+0

u означает, что если я переопределяю сравнение с методом, если да Да – Anny

+0

Показать объявление класса 'ShipDetail'. – shmosel

ответ

2

ShipDetail не сопоставим с сам. Связанная здесь:

<T extends Comparable<T>>

относится также к типу переменной T в аргументе, который выводится в ShipDetail.

ShipDetail должны быть определены следующим образом:

class ShipDetail implements Comparable<ShipDetail> { ... 

И не:

class ShipDetail implements Comparator<ShipDetail> { ... 

Comparator s являются объекты-алгоритмы, которые обеспечивают услугу сравнения других объектов, в то время как Comparable s являются объектами, которые сами позволяют сравнивать их с другими видами объектов.

+0

Спасибо, я понял разницу в использовании Comparator и Comparable. – Anny

+0

@ Просто здорово! Вы можете отметить ответ зеленым тиком, если считаете, что он полностью отвечает на ваш вопрос. – mszymborski