LocalDate还没有构造函数...我们如何在没有构造函数的情况下创建类?

时间:2018-08-31 19:51:21

标签: java java-8

我正在查看Time软件包的Java 8类,并且对没有像LocalDate类这样的构造函数的类有疑问。

如果创建Java类,则该类将始终具有默认的构造函数,但是LocalDate没有构造函数,也就是说,您不能这样做:

LocalDate date = new LocalDate();

如果执行此操作,则会收到编译错误“构造函数LocalDate()未定义”。

为什么LocalDate没有默认的构造函数?

最重要的问题...如何创建没有构造函数的类,该类只能实例化调用静态方法?

非常感谢和问候。

4 个答案:

答案 0 :(得分:9)

此处的典型模式是仅包含privatepackage default构造函数的类,并与工厂方法结合使用,该方法既可以是该类的公共静态方法,也可以是附带的工厂类的方法。您可以从in the javadoc列出的许多静态方法中获得LocalDate个对象。

答案 1 :(得分:3)

使用

LocalDate d = LocalDate.now(); 

现在创建一个LocalDate。有更多静态方法可实例化LocalDate。 API的设计者决定创建静态方法来实例化LocalDate,因为它们可以在实际实例化的对象上拥有更清晰的名称(例如,上面的“ now()”可以为当前日期创建LocalDate)。

答案 2 :(得分:2)

  

为什么LocalDate没有默认的构造函数?

因为没有构造它的“默认值”,这才有意义。在这种情况下,年,月和日字段的值是什么?

默认构造函数与带有零参数的显式构造函数不同。默认构造函数是由编译器添加的东西,但如果没有定义其他构造函数(language spec,则LocalDate具有显式构造函数,因此没有默认构造函数。该构造函数也是私有的,因此您不能直接调用它。

有效的Java 有一个关于使用静态工厂方法的冗长的条目(它是Item 1或Item 2,我忘记了)。它引用的第一个优点之一是它们的行为类似于命名的构造函数

很明显,即使不阅读Javadoc,LocalDate.now()也会返回一个与“ now”相对应的日期。尽管可以使默认构造函数执行相同的操作,但这并不明显。

答案 3 :(得分:0)

Java8 DateTime库允许访问用于创建对应类的对象的工厂方法,而不是构造函数,因为它提供了灵活性,例如可以在创建对象之前执行某些操作(例如解析)。同样,工厂方法可以具有有意义的名称,而不是构造函数。如其他答案所述,您可以使用:

LocalDate localDate = LocalDate.now(); //creating LocalDate instance