【发布时间】:2018-02-02 03:10:13
【问题描述】:
我使用 Java 作为示例。假设我正在开发一个软件并且我有这个
CustomList extends ArrayList<ObjectMapper>
现在这已将自定义函数添加到 ArrayList。它是专门为满足 ObjectMapper 实例列表而设计的(可能是 JsonNode、TreeNode;属于杰克逊依赖项)。现在整个项目都利用了这个。但是有人提到了这一点:“如果 ArrayList 将来被弃用或过时怎么办?”如果确实发生这种情况,我们将不得不重写或修改整个源代码。所以他们称之为Bad Design。我怎样才能避免这种情况?我应该创建一个实现 List 的接口OurList 并将其实现为OurArrayList,这将是我们将要使用的吗?请解释如何正确完成。假设我希望能够使用 ArrayList 的iterate 方法。在不影响项目代码可维护性的情况下,最好的方法是什么?
【问题讨论】:
-
一种解决方案是使用“组合而不是继承”。为什么需要 ArrayList 的所有方法?我认为如果 ArrayList 真的被弃用了,你会有更大的问题
-
如果?如果 Java 在未来被弃用怎么办?我当然是在开玩笑,但弃用并不是你必须开始担心 Java 的事情。曾经使用 java.util.Vector 代替 java.util.List。当然它不再使用,但被弃用,我认为不会!但是,就设计而言,以这种方式继承是一个糟糕的设计。您可能希望在名为
CustomList的新类中使用 数组列表。这称为委托 -
我在 oop 上提出了更具体的问题。这不仅仅是关于 ArrayList
-
为什么需要自定义实现 List?