ble*_*one 0 java interface comparable
有接口
interface Animal extends Comparable<Animal> {
}
Run Code Online (Sandbox Code Playgroud)
和2个班级
class Dog implements Animal {
}
Run Code Online (Sandbox Code Playgroud)
和
class Cat implements Animal {
}
Run Code Online (Sandbox Code Playgroud)
compareTo(Animal o)当争论不是同一个具体实施时应该返回什么Animal?
应该扔IllegalArgumentException吗?
例如,如果我将Dog实例传递给Cat.compareTo().我无法比较它们,因为它们是不同的类型.我不能称super.compareTo()他们的超级是Object没有实现的类型Comparable.铸造Dog到Cat会抛出ClassCastException.
interface AnimalComparable<Animal>如果您不希望其子类可以相互比较,则不应该首先实现.
在第8项"考虑实现Comparable"中有一个来自Effective Java 2nd Ed的相关引用(我从这个问题的答案中复制了以下大部分内容):
[
compareTo合同] 这三个条款的一个结果是,compareTo方法所施加的相等性测试必须遵守等于合同所施加的相同限制:反身性,对称性和及物性.因此,同样的警告适用:除非您愿意放弃面向对象抽象的好处(第8项),否则无法在保留compareTo契约的情况下使用新值组件扩展可实例化类.
所以,这就是说,如果你的子类没有比用于确定排序的超类更多的值,那么实现Comparable<Supertype>是合理的.
除了一般要求之外,其含义Comparable是Comparable<Superclass>应该在Superclass所有子类中以相同的方式实现.
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |