it-swarm-pt.tech

Java - O significado de <T estende Comparável <T>>?

O contexto completo é:

public class RClass<T extends Comparable<T>>

Eu estaria certo ao dizer que a declaração no título significa que os argumentos inseridos no método devem ser objetos de uma classe que implementa Comparable OR uma de suas classes derivadas?

Obrigado.

31
LTH

Isso significa que o parâmetro type deve suportar a comparação com outras instâncias de seu próprio tipo, através da interface Comparable.

Um exemplo dessa classe é fornecido no tutorial do Oracle Ordenação de Objetos . Observe o padrão semelhante a T extends Comparable<T> no trecho abaixo:

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

Java- O significado de<T extends Comparable<T>>?

a) Comparable <T> é uma interface genérica (lembre-se de que é uma "interface", isto é, não uma "classe")

b) extends significa herança de uma classe ou interface.

Do ponto acima mencionado # a, é uma interface .. (Lembre-se de que é uma herança de uma "interface", isto é, não de uma "classe")

c) Do exposto acima, ambos os pontos #a & #b,

aqui "uma interface" estende "outra interface".

Deve haver uma interface definida para esta classe. Apenas um exemplo aqui é

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

d) agora sua turma, ou seja, public class RClass {} DEVE

1 # SEMPRE "implementa" essa "interface genérica" ​​Comparable<T> .. !!!

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

2 # OR cria uma interface e se estende a essa "interface genérica" ​​Comparable<T> Ex:

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

Aqui, preste atenção especial à maneira como o parâmetro de tipo T é declarado por RClass e depois passado para MinMax. Como MinMax requer um tipo que implementa Comparable, a classe de implementação (RClass neste caso) deve especificar o mesmo limite. Além disso, uma vez que esse limite foi estabelecido, não há necessidade de especificá-lo novamente na cláusula implementes.

9
guhan vj

Em algum lugar dessa classe, o programador precisa escrever algo como

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

Para que isso funcione, o tipo T deve ter um método compareTo que o compare a outro objeto do tipo T. O Extending Comparable garante a existência desse método, entre outras coisas.

5
jforberg

Sim, e lembre-se de que objetos de classes derivadas de Comparable SÃO Comparable objetos. A herança é uma is-a relacionamento.

2
Luchian Grigore

Isso significa que você só pode criar uma instância de RClass com um tipo que literalmente estende Comparable<T>. Portanto,

RClass<Integer> a;

é aceitável, pois Integer estende Comparable<Integer>, enquanto

RClass<Object> b;

não é, já que Object não é uma classe que se estenda comparável.

2
djhaskin987

==> guhanvj, <T extends Comparable<T>> significa que <T> está tendo o limite superior de Comparable<T> objetos. Tão <T> pode ter tipos de classes Byte, Character, Double, Float, Long, Short, String e Inteiro que todos implementam Comparable<T> interface para pedidos naturais.

1
PerfectionIsNotOptional.

Simplificando, o tipo genérico T deve ser comparável para comparar com. caso contrário, você não poderá executar o T.compareTo. No Item 28 Java Efetivo, sugere: "always use Comparable<? super T> in preference to Comparable<T>. <T extends Comparable<? super T>>"

1
Andrew Xie