猿问

LocalDate 没有构造函数……我们如何创建没有构造函数的类?

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

如果你创建一个Java类,这个类总是有一个默认的构造函数,但是LocalDate没有构造函数,也就是说,你不能这样做:

LocalDate date = new LocalDate();

如果你这样做,你会得到一个编译错误“构造函数 LocalDate() 未定义”。

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

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

非常感谢和问候。


温温酱
浏览 379回答 3
3回答

侃侃无极

这里的典型模式是一个只有private或package default构造函数的类,结合一个工厂方法,该工厂方法要么是该类的公共静态方法,要么是伴随工厂类的方法。您可以LocalDate从javadoc 中列出的许多静态方法中获取对象。

富国沪深

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

一只萌萌小番薯

为什么 LocalDate 没有默认构造函数?因为它没有“默认值”来构造这是有道理的。在这种情况下,年、月和日字段的值是什么?默认构造函数与具有零参数的显式构造函数不同。默认构造函数是由编译器添加的,但前提是您没有定义其他构造函数(语言规范)。LocalDate有一个显式构造函数,因此它没有默认构造函数。该构造函数也是私有的,因此您不能直接调用它。Effective Java有一个关于使用静态工厂方法的冗长条目(它是条目 1 或条目 2,我忘记是哪个了)。它引用的第一个优点是它们的行为类似于命名构造函数。很明显,即使没有阅读 Javadoc,它LocalDate.now()也会返回一个与“现在”相对应的日期。虽然您可以让默认构造函数做同样的事情,但这并不明显。
随时随地看视频慕课网APP

相关分类

Java
我要回答