You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未定义rangeTo()时,Kotlin中MyDate的范围如何生成?

Kotlin中Comparable类的Range范围判断机制

为什么无需手动定义rangeOf?

Kotlin对所有实现Comparable接口的类,会自动支持..操作符——这个操作符本质是创建一个ClosedRange实例,不需要你手动实现rangeOf函数。

date in first..last的实际判断逻辑

in操作符在这里会调用ClosedRange.contains()方法,而这个方法的判断逻辑完全依赖你实现的compareTo方法:

  • 只要date.compareTo(first) >= 0(即date不早于first),并且date.compareTo(last) <= 0(即date不晚于last),就会返回true。

结合你的代码实例分析

你的MyDate类的compareTo是按年份优先,其次月份,最后日期的顺序做整体比较的:

  • MyDate(2014, 1, 1)和MyDate(2013, 12, 1)比较:年份2014大于2013,compareTo返回正数,满足>=0;
  • 和MyDate(2014, 3, 1)比较:年份相同,月份1小于3,compareTo返回负数,满足<=0;
    因此整体判断结果为true,和你运行代码得到的结果一致。

纠正你的误解

Kotlin不会为类的每个字段单独生成范围,而是把整个对象作为一个整体,通过你实现的compareTo逻辑做大小判断,进而确定是否在first..last这个闭合范围内。你之前设想的“按月份单独判断”是错误的,范围判断完全基于对象的整体比较结果,而非拆分字段分别判断。

内容的提问来源于stack exchange,提问作者Jason_L_Bens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 11:37:24