如何在Java中对泛型类型设置约束?

2022-09-01 00:09:06

我有一个泛型类:

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

我想我必须以某种方式在泛型上实现一个约束,以告诉它实现一个特定的接口(也许,如果存在的话)。TTComparable

任何人都可以为我提供一个小的代码示例吗?


答案 1

另请阅读此处的讨论:Java 中的泛型和排序

简短的回答,你能得到的最好的是:

class ListObject<T extends Comparable<? super T>> {
    ...
}

但也有理由只使用:

class ListObject<T extends Comparable> {
    ...
}

答案 2

这取决于您希望 compareTo 方法执行的操作。只需定义 compareTo 方法即可获取其他值,具体如下操作:ListObject<T>

public class ListObject<T> {
  public int compareTo(ListObject<T> other) {
    ...
  }
}

但是,如果要实际调用该参数上的方法,则需要添加一些约束来提供有关该值的更多信息,如下所示T

class ListObject<T extends Comparable<T>> {
  ...
}

推荐