当前位置: 首页 > 面试题库 >

实现不兼容的接口

邵亦
2023-03-14
问题内容

我正在尝试建立一个实现Queue和的类Map。这两个接口都定义了remove(Object)方法,但是返回类型不同:

public interface Collection<E> { //Queue extends Collection, which has the problem method

    public boolean remove(Object e);

    //...
}

public interface Map<K,V> {

    public V remove(K key);

    //...
}

public class QueuedMap<K,V> extends AbstractMap implements Queue {

    public V remove(K key) {/* ... */}
    //ERROR: V is not compatible with boolean

    //...
}

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


问题答案:

我认为在这种特殊情况下是不可能的。如果两个类都返回了对象类型,那么您将有机会,但是由于您混合了基本类型和对象类型,因此没有兼容的类型同时支持两个接口。

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

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



 类似资料:
  • 我已经从这个站点编译了一些AES实现代码,它应该执行128位密钥加密。我测试了可以正常工作的加密/解密程序。 然而,如果我用上面提到的代码加密任何东西,然后尝试用linux内置的openssl工具解密,我就是无法解密它,它甚至会记录错误的幻数错误。同样,如果我用openssl加密任何东西,并尝试用代码解密,那么就不会起作用。我试过两个cbc欧洲央行。 如果他们都在实施AES,它不应该以同样的方式工

  • 我定义了这个类: 在其他地方,在具有此签名的函数中: 我尝试返回新的ActorMapper(),但javac抱怨: 我可以投射它,它工作得很好,但为什么不能编译呢。有人能帮我吗?:)

  • 本文向大家介绍Webpack4+Babel7+ES6兼容IE8的实现,包括了Webpack4+Babel7+ES6兼容IE8的实现的使用技巧和注意事项,需要的朋友参考一下 前阵子重构了一个挺有意思的项目,是一个基于浏览器环境的数据采集sdk。公司各个产品的前端页面中都嵌入了这个sdk,用于采集用户的行为数据,上传到公司的大数据平台,为后续的运营决策分析提供数据支撑。 笔者接手这个项目的时候,前任开

  • 我有一个想用Scala实现的Java接口。该接口包含以下方法声明: 我的斯卡拉实现是: 错误 : 覆盖特征中的方法 xyz I类型的测试器 (x$1: java.util.Map[字符串,对象], x$2: java.util.Map[字符串,对象])java.util.List[java.util.Map[字符串,对象]];方法测试组件具有不兼容的类型覆盖 def testComponent(

  • 本文向大家介绍Android实现兼容的水波纹效果,包括了Android实现兼容的水波纹效果的使用技巧和注意事项,需要的朋友参考一下 先看看效果图 其实,要实现这一效果很简单,只要分drawable和drawablev21两个文件夹就好了。 普通情况下的selector: v21中的selector: 这里ripple中的color就是按下的水波纹颜色,在里面加入一个item,这个item就会变成背

  • 本文向大家介绍Html5的placeholder属性(IE兼容)实现代码,包括了Html5的placeholder属性(IE兼容)实现代码的使用技巧和注意事项,需要的朋友参考一下 HTML5对Web Form做了许多增强,比如input新增的type类型、Form Validation等。 Placeholder是HTML5新增的另一个属性,当input或者textarea设置了该属性后,该值的内