gpt4 book ai didi

java - 现有抽象类 Clock 上的新接口(interface) java.time.InstantSource 的主要目的是什么?

转载 作者:行者123 更新时间:2023-12-04 12:19:08 24 4
gpt4 key购买 nike

全新界面 java.time.InstantSource在 Java 17 中添加。如果该接口(interface)的所有实现都是 Clock,那么该附加抽象的用例是什么?实现呢?

最佳答案

感谢 NoDataFound 提供评论中的链接(链接在此答案底部重复)。 Stephen Colebourne(java.time 的原始开发人员)的“错误”报告说:

Problem

Since java.time was first added in Java 8, it has become apparent thatthere is a missing concept - a source of Instant independent of timezone. Put simply, if the only thing you want is an Instant, then Clockisn't the right API because it forces you to think about time zones.

A good architectural design for time-based code would have aseparation between the abstraction of the OS clock (dependencyinjected for unit testing), and the time zone linked to userlocalization. Passing these two things around separately is key. Toachieve this as it stands, developers must either write their ownTimeSource or InstantSource interface, or use Clock and "hold theirnose" to ignore the time zone held within.

A Supplier<Instant> obviously performs similar functionality, but itlacks discoverability and understandability. Plus, injectinggenerified interfaces tends to be painful.


用我的话来说: Clock class 被引入作为当前时间的来源。从概念上讲,当前时间的来源应该独立于时区。 Clock不过有一个时区。可能出于实际目的,以便您可以从中绘制各种日期时间对象: LocalDate , ZonedDateTime , LocalTime , 等等。 InstantSource询问的接口(interface)实现了我刚刚描述的时钟概念:独立于时区的当前时间的来源。当带时区的时钟对于您的目的来说太重了。
两者的目的之一 ClockInstantSource可测试性:通过这些,您可以控制运行测试时将哪个时间视为“当前时间”,这在您想要可重复的测试时通常是必需的。

… if anyway all implementations of that interface are Clockimplementations also?


我还没有检查是否全部 InstantSource Java 17 附带的实现是 Clock子类。即使是这种情况,(1) 也不是重点,(2) 没有人阻止您实现 InstantSource那不是 Clock .抽象是编程中的一个关键概念。如果您只想要 Instant s,那么你想针对一个只能给你的简单界面进行编程 Instant s。 InstantSource抽象出这样一个事实,即您正在使用的对象也可以扮演 Clock 的角色。在其他一些情况下。 InstantSource interface 是应用备受推崇的 Façade 设计模式的学校示例(链接如下)。借助来自错误系统的 Stephen Colebourne 的描述性词语,该界面使程序员在获得 Instant 时不再“捂着 Nose ”。 s。
链接
  • Add java.time.InstantSource在 OpenJDK 错误系统中。
  • Facade pattern在维基百科上。
  • 关于java - 现有抽象类 Clock 上的新接口(interface) java.time.InstantSource 的主要目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69199722/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com