2011-12-16 45 views
24

El ser contexto completo:Java- El significado de <T se extiende Comparable <T>>?

public class RClass<T extends Comparable<T>> 

sería yo razón al decir que la declaración en el título significa que los argumentos enchufados en el método deben ser o bien un objeto de una clase que implementa Comparable o uno de sus derivados clases?

Gracias.

+8

Tenga en cuenta que '>' (creo que puede hacer eso allí), sería preferible, ya que podría querer 'T' ser más preciso que su implementación de' Comparable'. –

+1

@ TomHawtin-tackline ¿Puedes dar un ejemplo de por qué esto es necesario? Supongamos que tengo mi estructura de datos de lista que solo funciona con tipos comparables. La forma en que yo especificaría esto es public class MyList >. Creo que eso indicaría y exigiría que mi estructura de datos solo funcione con tipos comparables. ¿De qué manera su fraseología marcaría la diferencia? – committedandroider

Respuesta

27

Esto significa que el parámetro tipo debe admitir la comparación con otras instancias de su propio tipo, a través de la interfaz Comparable.

Un ejemplo de dicha clase se proporciona en el tutorial de Oracle Object Ordering. Tenga en cuenta el patrón similar al T extends Comparable<T> en el extracto a continuación:

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

¿Por qué no solo tiene implementos de nombre comparables? ¿Por qué es necesario especificar el nombre de clase nuevamente? – committedandroider

+5

@committedandroider porque Comparable es una interfaz genérica que necesita para especificar el tipo – bitek

2

Sí, y tener en cuenta que los objetos de clases derivadas de ComparableSONComparable objetos. La herencia es una relación is-a.

2

Esto significa que sólo se puede crear una instancia de RClass con un tipo que se extiende literalmente Comparable<T>. Por lo tanto,

RClass<Integer> a; 

es aceptable, ya que Integer extiende Comparable<Integer>, mientras

RClass<Object> b; 

no es, desde Object no es una clase que se extiende comparable en absoluto.

3

En algún lugar de esa clase, el programador tiene que escribir algo como

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

Para que esto funcione, el tipo T debe tener un método que compareTo-lo compara con otro objeto de tipo T. La extensión de garantías comparables la existencia de tal método, entre otras cosas.

6

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

a) Comparable <T> es una interfaz genérica (recuerda que es una "interfaz" es decir no una "clase")

b) extends significa herencia de una clase o una interfaz.

Desde arriba-dicho punto # a, que es una interfaz .. (Recuerde que es una herencia de una "interfaz" es decir, no a partir de una "clase")

c) Desde arriba-dijo que ambos puntos # a & #b,

aquí "una interfaz" extiende "otra interfaz".

Debe haber una interfaz definida para esta clase. sólo un ejemplo aquí es

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

d) ahora su clase es decir public class RClass {} DEBE

1 # SEA "aplicar" este "interfaz genérica" ​​Comparable<T> .. !!!

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

2 # O crear una interfaz y extender a esta "interfaz genérica" ​​Comparable<T> ejemplo:

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

Aquí, Prestar especial atención a la forma en que el parámetro de tipo T se declara por RClass y y luego pasa al MinMax. Como MinMax requiere un tipo que implemente Comparable, , la clase de implementación (RClass en este caso) debe especificar el mismo límite. Además, una vez que se ha establecido este límite, no hay necesidad de especificarlo nuevamente en la cláusula de implementaciones.

+1

En la pregunta, se ha preguntado que 'public ** class ** RClass >'. Es una clase y no una interfaz. Así que por favor comenta cuál será el significado si se trata de una clase. –

1

En pocas palabras, el tipo genérico T debe ser comparable para poder comparar a. de lo contrario, no puede hacer T.compareTo. En Artículo 28 java eficaz, sugiere: "always use Comparable<? super T> in preference to Comparable<T>. <T extends Comparable<? super T>>"

0

==> guhanvj, <T extends Comparable<T>> significa que <T> es haber límite superior de Comparable<T> objetos. Por lo tanto, <T> puede tener tipos de Byte, Character, Double, Float, Long, Short, String e Integer clases que implementan la interfaz Comparable<T> para ordenamiento natural.

Cuestiones relacionadas