Comparable<T>抽象 接口

用于具有内在排序的类型的接口。

compareTo 操作定义了一个对象的完全排序,可用于排序。

建议使用 Comparable 接口来表示类型的自然排序。如果一个类型可以以多种方式排序,并且其中没有一种是显然的自然排序,那么可能最好不要使用 Comparable 接口,而是提供单独的 Comparator

建议 Comparable 的顺序与其操作符 operator == 相等(即 a.compareTo(b) == 0 当且仅当 a == b),但这不是必需的。例如,doubleDateTime 有不与操作符 operator == 一致的 compareTo 方法。对于双精度浮点数,compareTo 方法比相等性更精确,而对于 DateTime,它不如相等性精确。

示例

(0.0).compareTo(-0.0);   // => 1
0.0 == -0.0;             // => true
var now = DateTime.now();
var utcNow = now.toUtc();
now == utcNow;           // => false
now.compareTo(utcNow);   // => 0

Comparable 接口不意味着存在比较操作符 <<=>>=。只有在排序是小于/大于排序时,即你自然会使用“小于”来描述两个元素顺序的情况下,才应该定义这些操作符。

如果相等操作符和 compareTo 不一致,则比较操作符应遵循相等操作符,并可能也与 compareTo 不一致。否则,它们应匹配 compareTo 方法,以便 a < b 当且仅当 a.compareTo(b) < 0

double 类定义了与相等性兼容的比较操作符。这些操作符与 double.compareTo 在 -0.0 和 NaN 上的行为不同。

DateTime 类没有比较操作符,而是有更精确命名的 DateTime.isBeforeDateTime.isAfter,这两个都与 DateTime.compareTo 一致。

实现者

属性

hashCode int
此对象的哈希码。
无设置器继承
runtimeType Type
对象运行时类型的表示。
无设置器继承

方法

compareTo(T other) int
比较此对象与另一个对象。
noSuchMethod(Invocation invocation) → dynamic
当访问不存在的方法或属性时调用。
继承
toString() String
此对象的字符串表示形式。
继承

运算符

operator ==(Object other) bool
等于运算符。
继承

静态方法

compare(Comparable a, Comparable b) int
比较两个可比较对象的比较器