Java重写两个接口,方法名称的冲突

我在一个类中实现了MapCollection接口,但是在两个接口中都发生了remove(Object)方法,因此eclipse向我显示了一些错误。 返回类型不同,一个返回boolean ,另一个返回V但这似乎并不重要。

有没有办法告诉java / eclipse哪个方法实际被覆盖?

编辑:我有一个所有值必须实现的接口,它使用getKey()方法提供值,从而可以为地图编写一个add函数。 但是似乎没有办法让这个类同时看起来像一个地图和一个集合?

不,没有直接的方法。

实际上,动态绑定会考虑不包括返回类型的签名,因此Java编译器不能为具有相同签名但返回类型不同的同一类接受这两种方法。 如果两个方法具有相同的名称和相同的参数,那么它们也必须具有相同的返回类型,不幸的是你。

唯一的方法是将行为分成两个不同的类并组成它们。 也许像Collection asCollection()这样的方法。

Map已经有keySet() ,它是键的集合。 你为什么还需要collections品呢? 如果是这样,只需要做两个方法,比如asMapasCollecton ,它们会返回不同的类型。

不,没有办法解决这种冲突。

你应该考虑在两个接口中至少有一个使用组合和委托而不是inheritance,或者你可以在两个类中拆分你的类的function,这实际上取决于你的具体问题。

您可能需要组合而不是inheritance。 不幸的是,Java没有语言级别的支持 – 我的意思是它可以完成,但它是不必要的费力。

你需要重新考虑你的设计。 从根本上说,地图与集合不同。 想想Collection.add()方法。 没有键或没有值的键添加对象是否有意义?

您最好的选择(我认为并且取决于您的应用程序)是实现地图,但是当您需要集合时,请使用其中一种方法来获取密钥,值或键值对的集合。