【发布时间】:2016-12-28 23:13:59
【问题描述】:
我最近正在查看Netflix open source project 之一
在那里我发现使用了 final 类和私有构造函数。我完全知道
- final 是为了避免继承
- private 是禁止实例化
但我只是想知道为什么它们会一起使用。虽然方法是静态的,所以我们可以在不实例化的情况下使用它们,但仍然渴望了解其背后的设计原理。
【问题讨论】:
-
Netflix 出于某种原因不希望任何人扩展的单例类怎么样?
-
“private 是不允许实例化” 这是不正确的。类本身可以使用构造函数,例如在工厂方法中。
-
它很可能是一个带有实用方法的类(都是
static),这样的类不应该被扩展或实例化。这是一种常见的模式,虽然它不是非常面向对象的。 -
如果类现在不使用它,则将类设为 final 并且构造函数私有实际上不允许实例化
-
在 Java 1.5 之前,这是创建类型安全枚举类的常用方法,例如 TextAttribute、FileChannel.MapMode 和 HTML.Attribute。
标签: java private-constructor final-class