实现不兼容的接口

我正在尝试构建一个实现QueueMap 。 两个接口都定义了remove(Object)方法,但具有不同的返回类型:

 public interface Collection { //Queue extends Collection, which has the problem method public boolean remove(Object e); //... } public interface Map { public V remove(K key); //... } public class QueuedMap extends AbstractMap implements Queue { public V remove(K key) {/* ... */} //ERROR: V is not compatible with boolean //... } 

K的类型擦除导致这两个方法签名发生冲突。 我不能拥有其中一个,因为它是一个无效的覆盖,我不能同时拥有它们,因为它们具有相同的签名。 有什么办法可以让这两个接口共存吗?

在这种特殊情况下,我不相信这是可能的。 如果两个类都返回了Object类型,那么你有一些机会,但是由于你在混合基本类型和对象类型,所以没有兼容的类型可以支持这两个接口。

一种不同的方法可能是实现兼容的适当接口,然后使用组合来存储内部结构并根据需要将函数调用映射到该结构。 这将假设您不需要满足或可用作两个接口,而是特别是您需要公开的接口。

但是,如果您需要将此类替换为两个不兼容的接口,则无法完成。

您可以使用Queue所有的方法减去remove方法并使用它来创建您自己的界面MyQueue。 您可以为MyQueue接口提供Queue toQueue()方法,该方法返回转换为队列的对象。

这个转换过程可能只涉及返回一个匿名Queue的新实例,对于每个方法X,它只会调用/返回this. [X]。 对于remove方法,你可以调用this.remove()但是然后返回一个布尔值而不是this.remove()调用的返回值。