我有一个通用类:
public class ListObject<T>
{
// fields
protected T _Value = null;
// ..
}
现在我想做以下事情:
ListObject<MyClass> foo = new ListObject<MyClass>();
ListObject<MyClass> foo2 = new ListObject<MyClass>();
foo.compareTo(foo2);
问题:
如何定义compareTo()
方法并解析通用T
?
我想我必须以某种方式在通用T
上实现约束,以告诉T
实现特定的接口(如果存在的话,可能是Comparable
)。
任何人都可以向我提供一个小代码示例吗?
答案 0 :(得分:46)
另请阅读此处的讨论:Generics and sorting in Java
简短的回答,你能得到的最好的是:
class ListObject<T extends Comparable<? super T>> {
...
}
但也有理由只使用:
class ListObject<T extends Comparable> {
...
}
答案 1 :(得分:5)
这取决于你想要compareTo方法做什么。只需定义compareTo方法以获取其他ListObject<T>
值,即可通过以下方法完成
public class ListObject<T> {
public int compareTo(ListObject<T> other) {
...
}
}
但是,如果您想在该参数上实际调用方法,则需要添加一些约束以提供有关T
值的更多信息,如此
class ListObject<T extends Comparable<T>> {
...
}
答案 2 :(得分:2)
试试public class ListObject<T extends U>
。只有实现T
(或从U
派生)的U
才会被允许替换。
答案 3 :(得分:-3)
public class ListObject<T implements Comparable> {...}