Как установить ограничения на универсальные типы в 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() метод с resprect к дженерику T?

Я предполагаю, что должен так или иначе реализовать ограничение на дженерик T, сказать это T реализует определенный интерфейс (возможно, Comparable, если тот существует).

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

39
задан Rene Knop 16 November 2018 в 18:54
поделиться

4 ответа

Читайте также обсуждение здесь: Сортировка и сортировка в Java

Краткий ответ, лучшее, что вы можете получить:

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

, но есть также причина просто использовать:

class ListObject<T extends Comparable> {
    ...
}
49
ответ дан 27 November 2019 в 02:46
поделиться

Вы можете использовать SharingByCustom и использовать ключ, например имя пользователя .

-121--4998466-

Вы можете прочитать о каждой части URL-адреса в Википедии . Вы обнаружите, что http является именем протокола, : 9090 определяет, что соединение должно быть установлено на порту # 9090 etc.

-121--899580-

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

2
ответ дан 27 November 2019 в 02:46
поделиться
public class ListObject<T implements Comparable> {...}
-3
ответ дан 27 November 2019 в 02:46
поделиться

Это зависит от того, что именно вы хотите сделать методом сравнения. Простое определение метода compareTo для получения других значений ListObject выполняется следующим образом

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

Однако, если вы хотите на самом деле вызывать методы по этому параметру, вам нужно добавить некоторые ограничения, чтобы дать больше информации о значении T, как например

class ListObject<T extends Comparable<T>> {
  ...
}
5
ответ дан 27 November 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: