java实现泛型Comparable接口问题

frank_liu1980 2014-02-03 03:06:40
我定义了一个类实现Comparable泛型接口,然后在类里面也声明了一个泛型的成员t。在实现Comparable接口的compareTo方法时,我希望使用这个泛型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

问题的原因在哪里呢?还请高手解惑。
...全文
645 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fcqm8888 2015-06-01
  • 打赏
  • 举报
回复
接口问题要高度重视,接口在系统中是薄弱环节。
fcqm8888 2015-01-23
  • 打赏
  • 举报
回复
是否编译时,违反了编译的原则?
frank_liu1980 2014-02-04
  • 打赏
  • 举报
回复


public class Item<T extends Comparable<T>> implements Comparable<Item<T>> {
    private int s;
    private T t;

    public T getT() {
        return t;
    }

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

主要问题还是compareTo方法里的参数Item必须也是指定泛型的,如果直接就传Item而不是Item<T>编译器就会认为它和声明的implements Comparable<Item<T>> 不一致。所以上面这样的代码就能通过编译了。
wozuiqiangdeaoyi 2014-02-03
  • 打赏
  • 举报
回复
一楼的代码 return getT().compareTo(o.getT()); 改成 return getT().compareTo((T)o.getT());
frank_liu1980 2014-02-03
  • 打赏
  • 举报
回复
引用 1 楼 wozuiqiangdeaoyi 的回复:
类型不对,t的compareTo参数类型和o的compareTo的参数类型不一致
现在问题就是不知道怎么样使得它们参数类型一致,我在compareTo方法里传的参数就是Item啊。我把代码修改成这样还是不行:

public class Item<T extends Comparable<T>> implements Comparable<Item <T extends Comparable<T>>> {
    private int s;
    private T t;

    public T getT() {
        return t;
    }

    @Override
    public int compareTo(Item o) {
        return getT().compareTo(o.getT());
    }
}
编译的时候会报如下的错误: Item.java:1: error: > expected public class Item<T extends Comparable<T>> implements Comparable<Item <T extends Comparable<T>>> { ^ Item.java:1: error: '{' expected public class Item<T extends Comparable<T>> implements Comparable<Item <T extends Comparable<T>>> { ^ Item.java:1: error: > expected public class Item<T extends Comparable<T>> implements Comparable<Item <T extends Comparable<T>>> { ^ Item.java:1: error: <identifier> expected public class Item<T extends Comparable<T>> implements Comparable<Item <T extends Comparable<T>>> { ^ Item.java:2: error: '(' expected private int s; ^ 5 errors
wozuiqiangdeaoyi 2014-02-03
  • 打赏
  • 举报
回复
类型不对,t的compareTo参数类型和o的compareTo的参数类型不一致

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧