实现多个接口时的函数冲突

时间:2014-01-29 16:06:31

标签: java

我有一个变体样式对象foo,它可以表现为java.util.Mapjava.util.List以及其他普通旧数据类型。这个对象是用C ++编写的(以复合模式为模型),我正在构建一个JNI,以便我可以在Java中使用它。

在Java中,我有动力写

public class foo implements 
        Streamable, 
        java.util.Map<String, foo>,
        java.util.List<foo>

然后我遇到了麻烦。例如,我需要实现3种remove

public foo remove(int index)   
public boolean remove(Object key)   
public foo remove(Object key)

前两个用于java.util.list,最后一个用于java.util.map。当然,这是一个问题,因为您不能拥有两个具有相同名称和参数但不同返回类型的函数。

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:0)

您可以使用LinkedHashMap

  

Map接口的哈希表和链表实现,具有可预测的迭代顺序。此实现与HashMap的不同之处在于它维护了一个贯穿其所有条目的双向链表。

请参阅this question,因为它讨论了您遇到的同样问题。

答案 1 :(得分:0)

适配器可以工作。有一个类实现MapStream,另一个类实现ListStream。这些适配器各自接口所需的所有操作都将从公共底层foo实例中提取。