| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> ??高级JAVA开发必备技能??java8 JSR-310判断是否闰年实现,发现原作者的代码可能有问题(JAVA 小虚竹,建议收藏) -> 正文阅读 |
|
[Java知识库]??高级JAVA开发必备技能??java8 JSR-310判断是否闰年实现,发现原作者的代码可能有问题(JAVA 小虚竹,建议收藏) |
Chronology 判断是否闰年判断是否闰年是由年表Chronology 提供的,通常情况下,我们使用ISO下的年表,是IsoChronology 。 看下代码实现
好精炼的代码,值得我们研究研究 闰年的基本判定方法:
这段代码用了两个条件,这两个条件都符合,才是闰年。
(prolepticYear & 3) == 0 用了与运算符“&”,其使用规律如下: 3 的二进制是011 ,prolepticYear & 3 目的是保留最后2位二进制数,然后判断是否最后两位二进制数等于0。如果等于0,证明能被4整除。闰年一定要满足是4的倍数的条件; (prolepticYear % 100) != 0 || (prolepticYear % 400) == 0 这个就比较好理解了,看是不是100的倍数或者是不是400 倍数。 而且小虚竹发现java.time.Year#isLeap() 用的实现代码逻辑是一样的
即使是巨佬写的代码,也存在代码的复用性问题 上面IsoChronology 是对Chronology接口接口的isLeapYear实现,MinguoChronology等实现类的isLeapYear,互用了IsoChronology的isLeapYear方法。
巨佬是有考虑复用的,在MinguoChronology等实现类已经有复用了。 java.time.Year#isLeap() 的优先级高,因为它是静态方法。isoChronology ** 可以引Year.isLeap** 博主发现在IsoChronology ** 的resolveYMD** 中已经存在了对Year.isLeap 的引用。 有的工具类会为了减少外部类依赖,重新写一次底层方法,避免外部类(或是不在一个包底下)的类依赖,这个已经用了,说不过去 。所以代码是存在复用性问题的。 实战
推荐相关文章hutool日期时间系列文章2DateUtil(时间工具类)-常用的时间类型Date,DateTime,Calendar和TemporalAccessor(LocalDateTime)转换 9LocalDateTimeUtil(JDK8+中的{@link LocalDateTime} 工具类封装) 10TemporalAccessorUtil{@link TemporalAccessor} 工具类封装 其他 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 17:13:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |