Подтвердить что ты не робот

Java. Значение <T расширяет сравнимое <T>>?

Полный контекст:

public class RClass<T extends Comparable<T>>

Я был бы прав, сказав, что утверждение в заголовке означает, что аргументы, включенные в этот метод, должны быть либо объектом класса, который реализует Comparable OR один из его производных классов?

Спасибо.

4b9b3361

Ответ 1

Это означает, что параметр типа должен поддерживать сравнение с другими экземплярами своего собственного типа через интерфейс Comparable.

Пример такого класса приведен в учебнике Oracle Object Ordering. Обратите внимание на аналогичный шаблон T extends Comparable<T> в выдержке ниже:

public class Name implements Comparable<Name> {
   ...
   public int compareTo(Name n) { ... }
}

Ответ 2

Java. Значение <T extends Comparable<T>> ?

a) Comparable <T> это общий интерфейс (помните, что это "интерфейс", а не "класс" )

b) extends означает наследование от класса или интерфейса.

Из вышеприведенной точки # a это интерфейс.. (Помните, что это наследование от "интерфейса", а не от "класса" )

c) Из выше сказанного обе точки #a и #b,

здесь "один интерфейс" расширяет "другой интерфейс".

Для этого класса должен быть интерфейс. просто пример здесь

interface MinMax<T extends Comparable<T>> { 
    T min(); 
    T max(); 
} 

d) теперь ваш класс i.e public class RClass {} СЛЕДУЕТ

1 # ЭТО "реализуем" этот "общий интерфейс" Comparable<T>..!!!

ex: public class RClass<T> implements Comparable<T>

2 # ИЛИ создать интерфейс и перейти к этому "универсальному интерфейсу" Comparable<T> ex:

interface MinMax<T extends Comparable<T>> { 
   T min(); 
   T max(); 
} 
class RClass<T extends Comparable<T>> implements MinMax<T> {
    .....
    .....
}

Здесь  Обратите особое внимание на то, как параметр типа T объявляется RClass и  затем передается на MinMax. Поскольку MinMax требует тип, реализующий Comparable,  класс реализации (RClass в этом случае) должен указывать ту же самую границу. Более того,  как только эта связь установлена, нет необходимости указывать ее снова в предложении tools.

Ответ 3

Где-то в этом классе программисту нужно написать что-то вроде

if(t.compareTo(othert) < 0) {
    ...
}

Для того, чтобы работать, тип T должен иметь метод compareTo, который сравнивает его с другим объектом типа T. Расширение Comparable гарантирует существование такого метода, между прочим.

Ответ 4

Да, и имейте в виду, что объекты классов, полученные из объектов Comparable ARE Comparable. Наследование - это отношение is-a.

Ответ 5

Это означает, что вы можете создать экземпляр RClass с типом, который буквально расширяет Comparable<T>. Таким образом,

RClass<Integer> a;

допустимо, поскольку Integer продолжается Comparable<Integer>, а

RClass<Object> b;

нет, так как Object не является классом, который вообще сравним.

Ответ 6

Проще говоря, общий тип T должен быть сопоставим для сравнения. иначе вы не сможете сделать T.compareTo. В пункте 28 "Эффективная java" предлагается: "always use Comparable<? super T> in preference to Comparable<T>. <T extends Comparable<? super T>>"

Ответ 7

== > guhanvj, <T extends Comparable<T>> означает, что <T> имеет верхнюю границу объектов Comparable<T>. Таким образом, <T> может иметь типы классов Byte, Character, Double, Float, Long, Short, String и Integer, которые реализуют интерфейс Comparable<T> для естественного упорядочения.