Как установить ограничения на общие типы в Java?

Прежде всего, я знаю только основы Java. Теперь у меня есть следующий сценарий:

У меня есть общий класс:

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, если он существует).

Может ли кто-нибудь предоставить мне небольшой пример кода?

Ответ 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>> {
  ...
}

Ответ 3

Попробуйте public class ListObject<T extends U>. Только T, которые реализуют U (или выводятся из U), будут допустимыми заменами.

Ответ 4

public class ListObject<T implements Comparable> {...}