2009-08-25 17 views
10

de responsabilidad: No tengo una tonelada de experiencia con los genéricos de Java, pero mis colegas y yo acabamos de pasar una hora entera tratando de descifrar una interfaz que se estructuró como esto:Interfaz genérica toma auto como parámetro. Recursivo genérico?

interface HasAttributes<A extends HasAttributes<A, B>, 
         B extends HasAttributesType<B>> extends Identification<B> { 

¿Qué es exactamente lo hace ¿Quiere decir cuando una interfaz genérica toma un parámetro de tipo que es él mismo? ¿Qué hace esto?

+0

¿Podría también agregar al menos una parte del cuerpo de la interfaz? – Zed

+2

Uh, bueno y una explicación de lo que significa. Perdón por la frustración infundida en la pregunta, pero debe comprender la frustración que proviene de tratar de dar sentido a un código radicalmente complicado. Tuvimos cuatro desarrolladores experimentados tratando de dar sentido a este código escrito por nuestro quinto hombre: un desarrollador externo. Ninguno de nosotros podría entenderse. Después de una hora y media. No hace falta decir que estaba un poquito frustrado cuando escribí la pregunta. –

+2

'Interface' no es correcta sintaxis de Java – newacct

Respuesta

10

Hay un significado a esto - la clase de enumeración de Java es un buen ejemplo de una situación simliar:

public abstract class Enum<E extends Enum<E>> 
    implements Comparable<E>, Serializable 

Hay algunas respuestas esclarecedoras en this Stack Overflow question about Enum que debería arrojar alguna luz sobre este particular uso de los genéricos para usted, así como responder esto más elegantemente que pude.

+0

Gracias, eso me ayuda muchísimo. Estábamos muy, muy confundidos por esto. –

+2

"Esto tiene un significado" Entonces, ¿por qué no explicas este significado? – newacct

+0

@newacct si bien es costumbre resumir en línea el enlace a la pregunta, no creo que el copiar y pegar de la respuesta vinculada sea más valioso en este caso (es un enlace a otra pregunta SO, por lo que tendrá la misma duración que este) ... Siéntase libre de leer y resumir la respuesta vinculada aquí. –

Cuestiones relacionadas