Оле*_*ник 9 java java-time java.time.instant
Java 17 中添加了一个新接口。java.time.InstantSource如果该接口的所有实现都是实现,那么该附加抽象的用例是什么Clock?
Ole*_*.V. 11
感谢 NoDataFound 在评论中提供的链接(链接在此答案的底部重复)。Stephen Colebourne(java.time 的原始开发者)在 \xe2\x80\x9cbug\xe2\x80\x9d 报告中说道:
\n\n\n问题
\n自从 Java 8 中首次添加 java.time 以来,很明显存在一个缺失的概念 - 独立于时区的 Instant 源。简而言之,如果您唯一想要的是 Instant,那么 Clock\n 不是正确的 API,因为它迫使您考虑时区。
\n基于时间的代码的良好架构设计应该在操作系统时钟的抽象(为单元测试注入的依赖性)和链接到用户本地化的时区之间进行分离。分别传递这两件事是关键。为了实现这一点,开发人员必须编写自己的 TimeSource 或 InstantSource 接口,或者使用 Clock 并“保持其姿势”以忽略其中保留的时区。
\nA
\nSupplier<Instant>显然执行类似的功能,但缺乏可发现性和可理解性。另外,注入\n通用接口往往很痛苦。
用我的话说:该Clock课程是作为当前时间的来源引入的。从概念上讲,当前时间的来源应该独立于时区。但Clock仍然有一个时区。可能出于实际目的,以便您可以从中绘制各种日期时间对象:LocalDate、ZonedDateTime、LocalTime等。
所询问的接口InstantSource实现了我刚才描述的时钟概念:独立于时区的当前时间源。当带时区的时钟对于您的目的来说太重时。
Clock两者的目的之一InstantSource是可测试性:使用它们,您可以控制运行测试时将哪个时间视为 \xe2\x80\x9c 当前时间 \xe2\x80\x9d ,当您想要可重现的测试时,这通常是必需的。
\n\n\xe2\x80\xa6 是否该接口的所有实现都是 Clock\n 实现?
\n
我还没有检查过InstantSourceJava 17 附带的所有实现是否都是Clock子类。即使是这种情况,(1)这不是重点,(2)\xe2\x80\x99s 没有人阻止你实现一个InstantSource不是Clock. 抽象是编程中的一个关键概念。如果您只想要Instants,那么您希望针对一个只能提供Instants 的简单接口进行编程。InstantSource抽象出这样一个事实:您正在使用的对象也能够Clock在其他上下文中播放 a 的 r\xc3\xb4le 。该InstantSource界面是应用备受推崇的 Fa\xc3\xa7ade 设计模式的学校示例(链接如下)。借助来自 bug 系统的 Stephen Colebourne\xe2\x80\x99s 描述性文字,该接口将程序员从 \xe2\x80\x9e 中解放出来,同时获取Instants。
| 归档时间: |
|
| 查看次数: |
1131 次 |
| 最近记录: |