2011-09-02 18 views
8

tengo par de pensamientos con respecto a lo siguiente:La sintaxis <T se extiende Clase <T>> en Java

public interface MaxStack<T extends Comparable <T>> 

1-¿Por qué la clase que implementa MaxStack debe escribirse así:

public class MaxStackclass<T extends Comparable <T>> implements MaxStack<T> 

y no public class MaxStackclass<T extends Comparable <T>> implements MaxStack<T extends Comparable <T>>?

2- ¿Por qué las variables privadas de esta clase, cuando uso genéricos, deberían escribirse solo con <T> y no con <T extnds Comparable<T>>? Por ejemplo, private List<T> stack= new ArrayList<T>();

3-¿Cuál es la diferencia entre <T extends Comparable<T>> y <T extends Comparable> - si necesito comparar bewteen elementos en mi clase, tanto habrá O.K, ¿no?

Edit: Creo que el problema con 3 es que tal vez permite insertar una lista que se definió de la segunda manera para tener diferentes elementos que se extienden desde comparables y luego cuando quiero compararlos, ganó No será posible, ya que no podemos comparar Cadena con Entero, ambos se extienden desde Comparable.

+0

Sólo una pequeña crítica del estilo: el nombre de la clase pública no es CamelCase, una convención que evita malos entendidos. Si bien no es un problema con las clases anidadas, en este caso es una clase pública ... –

+0

Gracias @Tassos. – Numerator

+0

para obtener mejores resultados use '>' – newacct

Respuesta

8
  1. En la declaración maxStackclass<T extends Comparable <T>> que ya han expresado los límites de T. Entonces no lo necesitas de nuevo

  2. Razón igual que la anterior. No es necesario especificar límites en el mismo parámetro de tipo nuevamente.

  3. <T extends Comparable<T>> significa que T debe implementar la interfaz Comparable que se pueden comparar dos T casos. Mientras que <T extends Comparable> significa T implementa Comparable de modo que puede comparar dos Object s en general. El primero es más específico.

si necesito comparar bewteen elementos en mi clase, tanto habrá O.K, no?

Bueno, técnicamente se puede lograr el mismo resultado utilizando ambas. Sin embargo, para la declaración <T extends Comparable> implicará moldes innecesarios que se pueden evitar mediante el tipo de seguro <T extends Comparable<T>>

2

1) la clase tiene un parámetro de tipo T de un salto (extends Comparable <T>), este parámetro se pasa a la interfaz (que necesita el mismo límite aquí). Al pasar un parámetro de tipo, no debe repetir su límite, ¿por qué debería hacerlo?

2) como 1), el parámetro tipo tiene su límite declarado, no es necesario repetirlo.

Para aclarar:

La primera aparición parámetro de tipo (en este caso detrás del nombre de la interfaz o clase) es su declaración. Cualquier siguiente ocurrencia es un uso. Incluso nunca escribirías una declaración de tipo de variables cada vez que la usas, ¿verdad?

2

"3-¿Cuál es la diferencia entre <T extends Comparable<T>> y <T extends Comparable> - si necesito comparar los quince elementos de mi clase, ambos serán O.K, no?"

No, ambos no estarán bien. Supongamos que tengo una clase Foo que implements Comparable<Bar> pero las clases Foo y Bar no tienen relación entre sí. Entonces Foo no se puede comparar con otros objetos del tipo Foo. <T extends Comparable<T>> captará esto como un problema. <T extends Comparable> no lo hará.

0
<T extends Comparable<? super T>> 

más detalles here

Cuestiones relacionadas