我正在查看 Time 包的 Java 8 类,我对没有像 LocalDate 类这样的构造函数的类有疑问。如果你创建一个Java类,这个类总是有一个默认的构造函数,但是LocalDate没有构造函数,也就是说,你不能这样做:LocalDate date = new LocalDate();如果你这样做,你会得到一个编译错误“构造函数 LocalDate() 未定义”。为什么 LocalDate 没有默认构造函数?最重要的问题...如何创建一个没有构造函数的类,该类只能实例化调用静态方法?非常感谢和问候。
3 回答
侃侃无极
TA贡献2051条经验 获得超10个赞
这里的典型模式是一个只有private
或package default
构造函数的类,结合一个工厂方法,该工厂方法要么是该类的公共静态方法,要么是伴随工厂类的方法。您可以LocalDate
从javadoc 中列出的许多静态方法中获取对象。
富国沪深
TA贡献1790条经验 获得超9个赞
使用
LocalDate d = LocalDate.now();
现在创建一个 LocalDate。有更多静态方法可以实例化 LocalDate。API 的设计者决定创建静态方法来实例化 LocalDates,因为它们可以在实际实例化的内容上有更清晰的名称(例如上面的“now()”为当前日期创建 LocalDate)。
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
为什么 LocalDate 没有默认构造函数?
因为它没有“默认值”来构造这是有道理的。在这种情况下,年、月和日字段的值是什么?
默认构造函数与具有零参数的显式构造函数不同。默认构造函数是由编译器添加的,但前提是您没有定义其他构造函数(语言规范)。LocalDate
有一个显式构造函数,因此它没有默认构造函数。该构造函数也是私有的,因此您不能直接调用它。
Effective Java有一个关于使用静态工厂方法的冗长条目(它是条目 1 或条目 2,我忘记是哪个了)。它引用的第一个优点是它们的行为类似于命名构造函数。
很明显,即使没有阅读 Javadoc,它LocalDate.now()
也会返回一个与“现在”相对应的日期。虽然您可以让默认构造函数做同样的事情,但这并不明显。
添加回答
举报
0/150
提交
取消