java - List的逐次继承

标签 java list inheritance arraylist

我有一个这样的列表结构设置:

List<List<Value>> l = new RowList();

给出一个 "Type mismatch: Cannot convert from RowList to List<List<Value>>"错误。实现如下:

public class RowList extends ArrayList<ValueList>
public class ValueList extends ArrayList<Value>

Value 是我的代码库中的一个对象。为什么这不起作用?当我有这个时,一切正常:

public class RowList extends ArrayList<List<Value>>

对于我正在处理的大学作业,我们的讲师编写的代码通过调用返回 List<List<Value>> 的方法来工作。在我的代码中,然后添加 List<Value>到那个名单。由于该程序旨在实现数据库,因此有许多要求,例如键值不会多次出现等。要检查这是否没有发生,我需要能够拥有一个 ValueList 类或类似的东西这样我就可以扩展 add()检查这些要求的方法。

现在听起来这不是正确的做事方式,但在这件事上我真的没有任何选择,因为我们不允许更改执行此操作的代码。我相信这个想法是它让我们想到了泛型。

最佳答案

首先创建集合的子类是个坏主意。坚持标准实现,使用组合而不是继承。

现在要理解为什么这不能编译,下面是一个简短的例子。假设你想做的事情是可能的并且可以编译,那么你可以这样做:

RowList rowList = new RowList();
List<List<Value>> listOfLists = rowList;
listOfLists.add(new LinkedList<Value>());

尽管 RowList 应该包含 ValueList 的实例只有,你才会有一个 LinkedList<Value>在内部,破坏了程序的类型安全性和正确性。

关于java - List的逐次继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16730189/

相关文章:

python - 在 Python 中初始化大量 boolean 值

javascript - 扩展 javascript "class"(对象)

java - 在 Java 中处理具体类型时 instanceof 的替代方法

Java继承方法使用了错误的类

python - 使用 python 从不同长度的元组列表中删除重复项

CSS - 让水平列表中的每个元素具有相等份额的可用填充

java - DAO 命名约定

java - 如何让 AspectJ 和 Maven 参与 War 项目?

java - 修改jar文件的合规级别

java - 如何使用 Apache Shiro 检查用户是否已经登录?