Genérico clase E con el parámetro tipo que sea una subclase de E

Jia Zheng Lua:

Soy relativamente nuevo en el concepto de los genéricos en Java y no puedo decir la diferencia entre los 2 respuestas.

La pregunta en cuestión es la siguiente:
Supongamos que tenemos una clase genérica E y queremos que el parámetro de tipo a Eque sea una subclase de E. En otras palabras, permitimos E<F>sólo si la clase Fes o bien Eo hereda de E.

He reducido las opciones a lo que es posible.

1. class E<T extends E>
2. class E<T extends E<T>>.

Creo que la opción 1 se ajusten a las especificaciones de la cuestión. Sin embargo Estoy confundido acerca de la opción 2, lo que es lo que realmente se extienden.

MC emperador:

Bueno, en realidad la opción 1 utiliza un tipo de prima.

Definiría Ea tener un parámetro T, por lo que Ees un tipo parametrizado. Si se define Tpara extender E, también debe especificar el parámetro de tipo de E, o de lo contrario Ees un tipo crudo.

Así que la única "válida" 1 opción es la opción 2:

class E<T extends E<T>>

La Enumclase es un ejemplo bien conocido de un parámetro de tipo recursivo. Ver Java Enum definición .


1 Técnicamente, la primera opción también es válida en el sentido de sintácticamente correcta. Pero los tipos primas están allí sólo para compabibility hacia atrás. Nuevo código debe no contener tipos primas. Véase también ¿Qué es un tipo de prima y por qué no deberíamos usarlo? .

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=239255&siteId=1
Recomendado
Clasificación