假设我有一个带有形状列表的函数。我可以定义一些有用的类:
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);
}
答案 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>