java – 实现与泛型类可比
发布时间:2020-12-14 17:46:53 所属栏目:Java 来源:网络整理
导读:我想定义一个实现一般Comparable接口的类.在我的类中,我还定义了一个通用类型的元素T.为了实现该接口,我将比较委托给T.这里是我的代码: public class ItemT extends ComparableT implements ComparableItem { private int s; private T t; public T getT()
我想定义一个实现一般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 有人可以告诉我为什么和如何解决它? 解决方法
基本上,编译器无法证明o的泛型类型与此类型相同.
例如我可以做以下事情: new Item<String>().compareTo(new Item<Integer>()); 这显然是错误的,是编译器阻止的情况.我想你只需要修改原始类型: public class Item<T extends Comparable<T>> implements Comparable<Item<T>> { ... @Override public int compareTo(Item<T> o) { return getT().compareTo(o.getT()); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |