tipos reutilización poo polimorfismo polimorficas paquetes librerías definición java generics inner-classes

reutilización - tipos de polimorfismo en java



Uso de un tipo anidado como argumento de tipo genérico en la declaración de supertipo de la clase adjunta (3)

Básicamente tengo una pregunta acerca de por qué lo siguiente no funciona. Tengo una clase abstracta:

public abstract class Abstrct <T> { }

Luego defino una clase que hace uso de esa clase con una clase interna pública definida que quiero usar para el parámetro genérico, de la siguiente manera:

public class Outer extends Abstrct<Inner> { public class Inner { } }

Como todavía estoy aprendiendo Java, estoy más interesado en por qué no funciona. No tanto en cuanto a cómo hacer que funcione, pero eso también me interesaría.


Debe ser explícito ya que la clase interna que definió no es estática, por lo que solo existe dentro del alcance de la clase contenedora. (Consulte https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html )

En su caso, intente lo siguiente:

public class Outer extends Abstrct<Outer.Inner> { public class Inner { } }


Puede usar Abstrct<Outer.Inner> que el tipo sea inequívoco y válido.


Inner no está dentro del alcance de la declaración de clase de Outer . No es un nombre de tipo conocido cuando se usa en la cláusula de extends . Utilice una referencia calificada:

class Outer extends Abstract<Outer.Inner>

O importarlo:

import com.example.Outer.Inner;

De la especificación, con respecto al Scope :

El alcance de una declaración de un miembro m declarado o heredado por una clase de tipo C (§8.1.6) es el cuerpo completo de C , incluidas las declaraciones de tipo anidadas.

La cláusula de extends es parte de la declaración de Superclass de la clase, como se describe en la Specification . No es parte del cuerpo de la clase.

El alcance de un tipo usado en una declaración de import , sin embargo,

[..] es todas las declaraciones de clase y tipo de interfaz (§7.6) en la unidad de compilación en la que aparece la declaración de importación , así como cualquier anotación en la declaración del paquete (si corresponde) de la unidad de compilación.