为什么不应该将两个集合接口一起实现?

时间:2016-03-22 19:53:14

标签: java collections interface

我知道界面是什么以及什么是集合。但说实话,我找不到任何可靠的理由,为什么不在一个类中实现两个集合接口。

几天前在接受采访时问了这个问题。

3 个答案:

答案 0 :(得分:2)

在某些情况下,它们是或可以由同一个对象实现。

Queue和List都是由LinkedList实现的,TreeMap是NavigableMap和SortedMap。还有其他一些例子。

每个描述集合的特征或特征(作为使用它的方式公开)。

这一切都没有意义。对于Java集合来实现两个接口,它必须是两者的近乎完美的实现(也许这是你的答案)。

链接列表COULD技术上实现了ArrayList的方法,但这是一个非常糟糕的主意。

答案 1 :(得分:1)

首先,不兼容的方法合同:例如List.add必须始终返回true,如果元素已经存在,则Set.add必须始终返回false

答案 2 :(得分:1)

尚未提出的另一点是,您不能使用不同的类型参数两次实现相同的接口。

因此,如果您尝试将类实现为List<String>Collection<Integer>,则会出现编译器错误。这是因为List<String>扩展了Collection<String>,因此我们尝试使用不同的类型参数实施Collection两次。

如果您确实设法同时实现了两个集合接口,那么它必须类似于LinkedList示例(当您将其视为List时,泛型类型是相同的你认为它是Deque)。