Java 让静态方法返回私有类的设计决策背后是什么?例如Collections.synchronizedList()

Java 让静态方法返回私有类的设计决策背后是什么?例如Collections.synchronizedList(),java,collections,Java,Collections,我想扩展SynchronizedList类,但发现它是私有的 为什么它是这样设计的?这是因为设计它的人不希望你扩展它 P>精确的原因只对设计器知道,但是考虑有效java第二ED项目17中的建议: 继承的设计和文档,否则禁止继承 它简化了类的实现,如果您不必担心有人扩展它的话。“有效的Java”项提供了大量关于您必须为之设计的各种问题的详细信息,以及缓解这些问题所需的步骤 有人可能会说,类设计人员没有将精力投入到“为继承而设计和编写文档”中是懒惰的。在Collections.Synchroniz

我想扩展SynchronizedList类,但发现它是私有的


为什么它是这样设计的?

这是因为设计它的人不希望你扩展它

<> P>精确的原因只对设计器知道,但是考虑有效java第二ED项目17中的建议:

继承的设计和文档,否则禁止继承

它简化了类的实现,如果您不必担心有人扩展它的话。“有效的Java”项提供了大量关于您必须为之设计的各种问题的详细信息,以及缓解这些问题所需的步骤

有人可能会说,类设计人员没有将精力投入到“为继承而设计和编写文档”中是懒惰的。在
Collections.Synchronized*
类的特定情况下,我不相信这一点:类设计总是一种折衷;我认为设计师权衡了投入额外努力的好处和扩展同步集合的数量非常有限的用例。(我从来没有想过要尝试扩展这个类;不过,无可否认,这是一个1的样本量)

毕竟,这是一个包装类:您也可以将附加功能添加到
Synchronized*
类包装的类中,或者将
Synchronized*
类包装在装饰器中。或者,您可以自己简单地重新实现
Synchronized*
类——这是一堆样板文件,但并不难


无论你选择哪种方式,你都可以绕过它。

因为设计它的人不希望你扩展它。做这件事的确切原因只对设计者知道,但是考虑有效java第二ED项目17中的建议:“设计和文档继承或其他禁止”。它简化了类的实现,如果你不必担心有人会扩展它的话。我认为一个简短的问题不一定是一个糟糕的问题。你想在课堂上增加什么样的行为?可以将其添加到由
SynchronizedList
包装的列表中。真正的问题是“为什么要扩展它?”我想这可能是的一个实例。谢谢您的评论。我想问的问题是关于使用静态方法返回私有类的设计决策,我认为Andy Turner已经回答了这个问题,因为它简化了实现,但我不完全理解为什么现在会这样。感谢Andy Turner的帮助。你激发了我阅读高效Java的灵感