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

与通用类实现Comparable

宰父淳
2023-03-14
问题内容

我想定义一个实现通用Comparable接口的类。在课堂上,我还定义了一个通用类型元素T。为了实现该接口,我将比较委托给T。这是我的代码:

public class Item<T extends Comparable<T>> implements Comparable<Item> {

    private int s;
    private T t;

    public T getT() {
        return t;
    }

    @Override
    public int compareTo(Item o) {
        return getT().compareTo(o.getT());
    }
}

当我尝试对其进行编译时,会出现以下错误信息:

Item.java:11: error: method compareTo in interface Comparable<T#2> cannot be applied to given types;
        return getT().compareTo(o.getT());
                     ^
  required: T#1
  found: Comparable
  reason: actual argument Comparable cannot be converted to T#1 by method invocation conversion
  where T#1,T#2 are type-variables:
    T#1 extends Comparable<T#1> declared in class Item
    T#2 extends Object declared in interface Comparable
1 error

谁能告诉我原因以及如何解决?


问题答案:

Item(不带任何类型参数)是原始类型,因此:

  1. 我们可以通过任何形式的ItemItem.compareTo。例如,这将编译:

    new Item<String>().compareTo(new Item<Integer>())
    
  2. 该方法o.getT()返回Comparable而不是T,这将导致编译错误。

在第一点下的示例中,传递Item<Integer>给后Item.compareTo,我们会错误地传递IntegerString.compareTo。编译错误使我们无法编写执行此操作的代码。

我认为您只需要删除原始类型:

public class Item<T extends Comparable<T>>
implements Comparable<Item<T>> {

    ...

    @Override
    public int compareTo(Item<T> o) {
        return getT().compareTo(o.getT());
    }
}


 类似资料:
  • 本文向大家介绍php实现的通用图片处理类,包括了php实现的通用图片处理类的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php实现的通用图片处理类。分享给大家供大家参考。具体如下: 该图片处理函数功能:缩放、剪切、相框、水印、锐化、旋转、翻转、透明度、反色,处理并保存历史记录的思路:当有图片有改动时自动生成一张新图片,命名方式可以考虑在原图片的基础上加上步骤,例如:图片名称+__第几步。

  • 本文向大家介绍C#实现Access通用访问类OleDbHelper完整实例,包括了C#实现Access通用访问类OleDbHelper完整实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现Access通用访问类OleDbHelper。分享给大家供大家参考,具体如下: 最近在做一个项目数据库用的是Access,第一次使用Access数据库,刚开始做有些不顺,数据库的操作和SqlSe

  • 问题内容: 让我们假设两个接口: 现在,我要创建一个工厂(例如,…),但是对于两个接口的实现类都不是必需的(例如在java参数化的通用静态工厂中)。本应以这种方式工作(其中农具和工具): 这应该是工厂: 我收到此错误的地方: 顺便说一句:是否可以使该方法静态? 问题答案: 由于Java中的泛型是使用擦除来实现的,因此的类型信息将在运行时不可用,这意味着您无法以这种方式实例化(或)。 但是,您 可以

  • 问题内容: 能否请您帮我如何使用和一起键入,就像通过使用来演示我的方法一样 问题答案: 为了安全起见,请考虑此处所示。这将允许使用此处讨论的。 附录:即使是更一般的情况,我也会使用,如下所示。如键盘示例所示,我将使用按键绑定在组件之间共享。 附录:为了说明@kleopatra的评论,我更新了绑定到的代码。实际上,我只使用尚未绑定到文本字段操作或正常使用所需的键。

  • 本文向大家介绍JavaScript中的类与实例实现方法,包括了JavaScript中的类与实例实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript中的类与实例实现方法。分享给大家供大家参考。具体如下: JavaScript 中没有父类, 子类的概念, 也没有class 和 instance 的概念, 全靠 prototype chain来实现继承. 当查找一个对象的

  • 本文向大家介绍PHP实现与java 通信的插件使用教程,包括了PHP实现与java 通信的插件使用教程的使用技巧和注意事项,需要的朋友参考一下 由于公司这块项目需要和java对接的一些东西 又不想用webservice 所以弄了个php模块 折腾了好长时间编译一直过不去. 索性就把源码修改了.经测试可用. 另外附一份我的安装记录 让大家少走一些弯路 另外这玩意需要安装java   直接去官网下载就