Java Generic Inheritance / Generic Comparable

时间:2017-06-04 21:53:21

标签: java generics inheritance

假设我有一个带有形状列表的函数。我可以定义一些有用的类:

public abstract class Shape implements Comparable<Shape> { }

public abstract class FourSidedShapes extends Shape { }

public class Rectangle extends FourSidedShapes{
   ...
   @Override
   public int compareTo(Shape o) {
    return 0;
   }
}

public class Square extends FourSidedShapes {... }

我有一个帮手容器:

//Implements doubly-linked sorted list
public class SortedLinkedListNode<T extends Shape> {
   public SortedLinkedListNode<T> add(T e) { }
   public <E extends Shape> T get(E target) { }
   ...
}

我想做这样的事情:TreeSet<FourSidedShapes> myshapes;

如果我这样做,我有两个问题。首先,我想让SortedLinkedList帮助器集合尽可能保持通用。所以我想编写实现,假设它将保持Shape或某些形状的子类(包括未被考虑/实现的对象,如圆/三角形等。但如果我这样做,那么我必须实现public int即使我真的只想实现public int compareTo(FourSidedShapes o),因为我真的只在我的集合中存储FourSidedShapes的子类。所以我的问题是,如何修改我的SortedLinkedListNode,它扩展了一个compareTo,它不低于它存储的基类?例如,如果我存储形状,那么它期望形状实现Comparable<Shapes>。如果我存储FourSidedShapes ,然后它期望FourSidedShapes实现Comparable<FourSidedShapes>。我怀疑正确的答案涉及使Comparable参数通用,但我不确定它是什么样的。例如,像

public class ShapeComparable<T extends Comparable<T>> {
   public abstract int compareTo(T other);
}

1 个答案:

答案 0 :(得分:0)

我对您的问题并不完全清楚,但我假设您在询问如何this.recipeListBox.DataSource = items; // Instruct the listbox to display the Name or any property this.recipeListBox.DisplayMember = "Name"; // Optionally instruct the listbox that the ValueMember is Name // If you use SelectedValue, it will return the value from this property this.recipeListBox.ValueMember = "Name"; Rectangle实施FourSidedShapes。 以下是显示如何执行此操作的代码:

Comparable<FourSidedShapes>