кога да използвам extends или implements Comparable (Java)? + защо не мога да създам обект

Изучавам структури от данни и ме помолиха да напиша програма, която позволява на мениджър на магазин да манипулира инвентар, използвайки 4 класа: ListInterface, ExpandableArrayList (клас, който имплементира интерфейса), class item (който е типът, съхранен в Arraylist ) , и разбира се, тестов клас.

някои методи изискват използването на compareTo. тоест да бъде Сравним, но не знам кой точно клас трябва да бъде Сравним? и ако трябва да напиша Прилага или разширява Сравнимо?

това са заглавките на класа, които имам в момента:

public interface ListInterface<T extends Comparable <?super T >> {... }

public class ExpandableArrayList <T extends Comparable <? super T >>
implements ListInterface <T> { ...... } 

public class Item<T extends Comparable<T>> {... } 

но по някаква причина не мога да създам обект в тестовия клас. когато пиша:

ListInterface<Item> inventoryList= new ExpandableArrayList<Item>(); 

Получавам следните грешки:

Test.java:9: error: type argument Item is not within bounds of type-variable T 
ListInterface<Item> inventoryList= new ExpandableArrayList<Item> () ; 
where T is a type-variable:
T extends Comparable<? super T> declared in interface ListInterface


Test.java:9: error: type argument Item is not within bounds of type-variable T 
ListInterface<Item> inventoryList= new ExpandableArrayList<Item> () ;
where T is a type-variable:
T extends Comparable<? super T> declared in class ExpandableArrayList

Как мога да разреша това? какво точно трябва да се промени? ..

благодаря много предварително.


person java student    schedule 23.03.2015    source източник
comment
Вървиш това наобратно. Първо, вие използвате генерични вместо разширяващи типове. Но най-важното: класовете, които трябва да бъдат сравними, са тези, които сравнявате. Това трябва да бъде точка във вашия дизайн. Ако не е нужно да сравнявате/сортирате, не използвайте методи, които изискват Comparable. Ако го направите, тогава нещото, което сравнявате/сортирате, трябва да бъде Comparable.   -  person RealSkeptic    schedule 23.03.2015


Отговори (2)


T, който е вашият тип, артикулът трябва да внедри Comparable. Това ще позволи на класа ExpandableArrayList да изпълнява метода compareTo върху елементи от тип Item, използвайки сравнението, предоставено от този клас. Когато имплементирате compareTo от Comparable, трябва да дадете начин за сравняване на различни елементи, в идеалния случай това трябва да се основава на атрибутите на класа Item.

public class Item implements Comparable<Item> {... }

Ето как би изглеждала класовата дефиниция.

Трябва да напишете implements за интерфейси и extends за класове.

Наследяване урок

Интерфейси урок

person tinker    schedule 23.03.2015
comment
о, наистина помогнахте много!.. Сега разбирам, благодаря ви - person java student; 24.03.2015

Трябва да е така -

public interface ListInterface<T extends Comparable<? super T>> {... }

public class ExpandableArrayList<T extends Comparable<? super T>> implements ListInterface <T extends Comparable<? super T>> { ...... } 

public class Item implements Comparable<Item> {... } 
person hemant1900    schedule 23.03.2015