когда использовать расширения или реализации Comparable (Java)? + почему я не могу создать объект

Я изучаю структуры данных, и меня попросили написать программу, которая позволяет менеджеру магазина манипулировать запасами, используя 4 класса: ListInterface, ExpandableArrayList (класс, реализующий интерфейс), элемент класса (тип которого хранится в Arraylist). ) и, конечно же, тестовый класс.

некоторые методы требуют использования compareTo. то есть быть Comparable, но я не знаю, какой именно класс должен быть Comparable? и если я должен написать Implements или extends Comparable?

это заголовки классов, которые у меня есть прямо сейчас:

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>> {... } 

но по какой-то причине я не могу создать объект в классе Test. когда я набираю:

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, который является вашим типом Item, который должен реализовать 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