Как установить ограничения на общие типы в 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> {...}