我想扩展SynchronizedList类,但发现它是私有的。
为什么这样设计?
答案 0 :(得分:3)
这是因为设计它的人并不希望你扩展它。
这样做的确切原因只有设计人员知道,但请考虑Effective Java 2nd Ed Item 17中的建议:
继承的设计和文档,否则禁止它。
如果您不必担心有人扩展课程,它会简化课程的实施。 Effective Java项目提供了您必须设计的各种问题的详细信息,以及缓解这些问题所需的步骤。
有人可能会争辩说,班级设计师没有把努力投入到设计和记录继承中,这是懒惰的。在Collections.Synchronized*
课程的特定情况下,我不相信这一点:课堂设计总是妥协;我认为设计师权衡了在扩展同步集合的极少数用例的情况下付出额外努力的好处。 (我从未想过要尝试扩展这个类;不过可以肯定的是,这样的大小为1)。
毕竟,这是一个包装类:您可以选择将其他功能添加到由Synchronized*
类包装的类中,或者将Synchronized*
类包装在装饰器中。或者,你可以简单地重新实现Synchronized*
课程 - 它是一堆样板,但它并不难。
无论您选择哪种方式,都可以解决它。