首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中Instant类的构造函数?

Java中Instant类的构造函数?
EN

Stack Overflow用户
提问于 2018-06-01 18:45:05
回答 3查看 2.3K关注 0票数 3

我知道我可以这样创建一个Instant对象:

代码语言:javascript
复制
Instant instant = Instant.now();

我不明白为什么我不能像这样创建一个Instant对象:

代码语言:javascript
复制
Instant instant1 = new Instant();

我找不到任何关于Instant构造函数的信息,我知道Instant不是一个接口或抽象类。为什么我不能创建Instant对象?

提前感谢!

EN

回答 3

Stack Overflow用户

发布于 2018-06-01 18:48:29

因为构造函数是私有。不要忘记,有一些开放源码的Java实现,您可以简单地查看它们的implementations来解决这样的问题:

代码语言:javascript
复制
/**
 * Constructs an instance of {@code Instant} using seconds from the epoch of
 * 1970-01-01T00:00:00Z and nanosecond fraction of second.
 *
 * @param epochSecond  the number of seconds from 1970-01-01T00:00:00Z
 * @param nanos  the nanoseconds within the second, must be positive
 */
private Instant(long epochSecond, int nanos) {
    super();
    this.seconds = epochSecond;
    this.nanos = nanos;
}
票数 3
EN

Stack Overflow用户

发布于 2018-06-01 18:48:08

Instant源代码声明了一个带有2个参数的private构造函数,这阻止了无参数构造函数的自动生成。这是经过设计的:Instant源代码的作者希望阻止用户使用构造函数,因为他们希望强制用户使用Instant.now()

票数 2
EN

Stack Overflow用户

发布于 2021-09-13 17:10:36

使用私有构造函数是因为:

  • 有时我们想使用单例设计模式。为此,我们将类的构造函数声明为私有,并创建now()方法来提供此functionality.
  • Singleton设计模式仅为整个系统提供一个对象,这样我们就不会创建多个对象来优化我们的代码和垃圾回收。

希望我回答了

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50641710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档