【发布时间】:2015-04-02 09:48:53
【问题描述】:
public class WorthComparator implements Comparator<Värdesak> {
public int compare(Värdesak v1, Värdesak v2) {
if (v1 instanceof Apparat && v2 instanceof Apparat) {
return ((Apparat) v1).worth() > ((Apparat) v2).worth() ? 1
: ((Apparat) v1).worth() < ((Apparat) v2).worth() ? -1
: 0;
} else if (v1 instanceof Smycke && v2 instanceof Smycke) {
return ((Smycke) v1).worth() > ((Smycke) v2).worth() ? 1
: ((Smycke) v1).worth() < ((Smycke) v2).worth() ? -1
: 0;
} else if (v1 instanceof Aktie && v2 instanceof Aktie) {
return ((Aktie) v1).worth() > ((Aktie) v2).worth() ? 1
: ((Aktie) v1).worth() < ((Aktie) v2).worth() ? -1 : 0;
}
}
}
如您所见,我正在尝试比较 ArrayList 中的不同对象,然后在我的 GUI 中按最高值对它们进行排序。每个不同的对象(“Smycke”、Aktie、Apparat“)都在它们各自的子类中,每个子类都有一个估计它们的值的方法。“Värdesak”是超类。
我的问题是我不知道我会得到谁的退货声明,还是有另一种聪明的方法来做到这一点?
【问题讨论】:
-
让它们都实现一个带有
worth()的接口,或者将worth()作为Värdesak中的抽象方法会更简洁。然后你可以在没有任何强制转换或instanceof检查的情况下调用worth()。 -
注意:也许将
Värdesak修改为Vardesak会更好。 using unicode is generally not adviseable. -
@CommuSoft 这通常是可取的,但是一旦您希望读者能够理解瑞典语中的标识符,拼错单词几乎不会使它们更具可读性。
标签: java swing return-value comparator