поэтому у меня есть класс с именем ExpandableArrayList, который реализует ListInterface. Этот ArrayList заполнен экземплярами типа Item (он представляет мой универсальный тип T). class Item реализует Comparable и имеет следующие атрибуты: String itemNo, String itemName, двойная цена и целое количество.
Предполагается, что метод с именем CheckLimit в классе ExpandableArrayList проверяет, имеет ли какая-либо запись в списке количество ниже заданного предела или нет. Если это так, он удаляет его и вставляет в начало списка.
Я уже определил compareTo для класса Item на основе количества предметов, и это моя текущая реализация для checklimit:
public void checkLimit (int limit){
/*Type conversions, change limit from int to Object and then to T,
in order to use CompareTo: */
Object limitObj = (Integer)limit;
T limitT = (T)limitObj;
for ( int i=0 ; i< length ; i++ ) {
if ( limitT.compareTo(list[i]) > 0){
/* ....... Remove and insert at front ...... */
} // end if
} // end for
} // end checkLimit
Он компилируется правильно, но вызывает исключение времени выполнения
Exception in thread "main" java.lang.ClassCastException:
Item cannot be cast to java.lang.Integer
Затем я попытался добавить следующий метод к элементу класса
/* Added method ConvertToTypeT :
this method is called by method checkLimit in class
ExpandableArrayList. it receives an integer and creates a temporary
Item Object having this integer as its quantity for comparision purpose only*/
public Item convertToTypeT(int limit) {
Item converted = new Item (" "," ",0.0,limit);
return converted; }
и изменил контрольный лимит на:
public void checkLimit (int limit){
for ( int i=0 ; i< length ; i++ ) {
T limitT =list[i].convertToTypeT(limit);
if ( limitT.compareTo(list[i]) > 0){
/* ....... Remove and insert at front ...... */
} // end if
} // end for
} // end checkLimit
но не работало даже после того, как я изменил общедоступный идентификатор
ExpandableArrayList.java:255: error: cannot find symbol
T limitT =list[i].convertToTypeT(limit);
^
symbol: method convertToTypeT(int)
location: interface Comparable<CAP#1>
where T is a type-variable:
T extends Comparable<? super T> declared in class ExpandableArrayList
where CAP#1 is a fresh type-variable:
CAP#1 extends Object super: T from capture of ? super T
так есть ли правильный способ выполнить такое сравнение? учитывая, что заголовок checkLimit был указан в вопросе и его не следует менять (у него всегда должен быть аргумент int).
Спасибо заранее.
Item
иInteger
— совершенно разные объекты. Почему вы пытаетесь преобразоватьInteger
вItem
? Примечание. Приведение не приводит к автоматическому преобразованию объекта в объект другого типа. - person Jesper   schedule 24.03.2015T
, это то, что он реализуетComparable<? super T>
, то у вас нет способа добраться доquantity
в классеItem
, и тогда это будет сложно! - person Jesper   schedule 24.03.2015