У меня есть универсальный класс:
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
, если тот существует).
Кто-либо может предоставить мне маленький пример кода?
Читайте также обсуждение здесь: Сортировка и сортировка в Java
Краткий ответ, лучшее, что вы можете получить:
class ListObject<T extends Comparable<? super T>> {
...
}
, но есть также причина просто использовать:
class ListObject<T extends Comparable> {
...
}
Вы можете использовать SharingByCustom
и использовать ключ, например имя пользователя
.
Вы можете прочитать о каждой части URL-адреса в Википедии .
Вы обнаружите, что http
является именем протокола, : 9090
определяет, что соединение должно быть установлено на порту # 9090 etc.
Попробуйте общий класс ListObject < T расширяет U >
. Допустимыми заменами будут только T
, реализующие U
(или производные от U
).
public class ListObject<T implements Comparable> {...}
Это зависит от того, что именно вы хотите сделать методом сравнения. Простое определение метода compareTo для получения других значений ListObject
выполняется следующим образом
public class ListObject<T> {
public int compareTo(ListObject<T> other) {
...
}
}
Однако, если вы хотите на самом деле вызывать методы по этому параметру, вам нужно добавить некоторые ограничения, чтобы дать больше информации о значении T
, как например
class ListObject<T extends Comparable<T>> {
...
}