我有一个这样的列表结构设置:
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/