用于具有内在排序的类型的接口。
compareTo 操作定义了一个对象的完全排序,可用于排序。
建议使用 Comparable 接口来表示类型的自然排序。如果一个类型可以以多种方式排序,并且其中没有一种是显然的自然排序,那么可能最好不要使用 Comparable 接口,而是提供单独的 Comparator。
建议 Comparable 的顺序与其操作符 operator == 相等(即 a.compareTo(b) == 0
当且仅当 a == b
),但这不是必需的。例如,double 和 DateTime 有不与操作符 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.isBefore 和 DateTime.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 - 比较两个可比较对象的比较器。