cit*_*nas 39 java generics constraints
我有一个通用类:
public class ListObject<T>
{
// fields
protected T _Value = null;
// ..
}
Run Code Online (Sandbox Code Playgroud)
现在我想做类似以下的事情:
ListObject<MyClass> foo = new ListObject<MyClass>();
ListObject<MyClass> foo2 = new ListObject<MyClass>();
foo.compareTo(foo2);
Run Code Online (Sandbox Code Playgroud)
题:
如何定义compareTo()具有泛型的方法T?
我想我必须以某种方式对泛型实现一个约束T,告诉它T实现一个特定的接口(也许Comparable,如果那个存在).
任何人都可以为我提供一个小代码示例吗?
nan*_*nda 49
另请阅读此处的讨论:Java中的泛型和排序
简短的回答,你能得到的最好的是:
class ListObject<T extends Comparable<? super T>> {
...
}
Run Code Online (Sandbox Code Playgroud)
但也有理由只使用:
class ListObject<T extends Comparable> {
...
}
Run Code Online (Sandbox Code Playgroud)
这取决于您希望compareTo方法做什么.只需定义compareTo方法以获取其他ListObject<T>值,即可完成以下操作
public class ListObject<T> {
public int compareTo(ListObject<T> other) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果要在该参数上实际调用方法,则需要添加一些约束以提供有关该T值的更多信息,如此
class ListObject<T extends Comparable<T>> {
...
}
Run Code Online (Sandbox Code Playgroud)