Java中Instant类的构造函数?

时间:2018-06-01 10:45:05

标签: java time constructor instance

我知道我可以用这种方式创建一个Instant对象:

Instant instant = Instant.now();

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

Instant instant1 = new Instant();

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

提前致谢!

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

因为构造函数是私有。不要忘记有Java的开源实现,你只需查看他们的implementations来解决这些问题:

/**
 * 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;
}