2011-10-01 7 views
31

Estoy desarrollando una pequeña aplicación de escritorio en Netbeans. Este es mi primer programa y estoy enfrentando un tipo de error muy extraño. Sé que hice algo mal, pero incapaz de rastrear lo que estoy haciendo mal :(¿Cómo puedo resolver "una instancia adjunta que contiene X.Y es obligatorio"?

por favor me ayude a resolver este error

Descripción:. Tengo un paquete por defecto Src y estoy creando nuevas clases de Java . en este paquete como necesarias, junto con otras clases hice una clase X así:

public class X 
{ 
    public class Y 
    {//some member functions and variables exist here} 

    public class Z 
    {//some member functions and variables exist here} 

    //some member functions and variables exist here 
} 

ahora tengo que crear una instancia de una de las clases internas de alguna otra clase que existe en el mismo paquete, como este :

public X.Y oY = new X.Y(); 

pero estoy consiguiendo el error siguiente:

an enclosing instance that contains X.Y is required

por favor me ayude a resolver este error.

+0

posible duplicado de [Una instancia que encierra que contiene se requiere] (http://stackoverflow.com/questions/4297857/an-enclosing-instance-that-contains-my-reference-isquired) –

Respuesta

68

Antes que nada tienes que crear un objeto de clase X (clase externa) y luego usar la sintaxis objX.new InnerClass() para crear un objeto de la clase Y.

intento,

X x=new X(); 
X.Y y=x.new Y(); 
+6

¡Guau! ¡He apoyado algo hoy! Extraña sintaxis ¡Muy agradable! +1 –

+1

¿Alguien sabe por qué hicieron el lenguaje de esta manera? ¿Para qué sirve esto? – wonton

+0

Disculpe por la respuesta tardía, creo que es capaz de admitir clases anidadas estáticas y no anidadas. No soy un experto, pero por lo que estoy leyendo, creo que esto es para obligar a las clases subordinadas a ser miembros de una instancia de uno de los padres (no estáticos) y crear una sintaxis diferente para las clases subordinadas que no requieren un padre (estático). https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html – joelc

31

Quiere declarar clases internas estáticas: public static class Y.

+0

¿Por qué motivo? – Mahesh

+2

Porque el OP no mencionó que debe permanecer no estático. Si necesita la instancia adjunta, comentará sobre el error del compilador para convertirlo en estático y aprender aún más de su pregunta. –

+2

+1 para esta respuesta: la respuesta aceptada no está del todo completa, ya que supone que la clase es obligatoria desde un contexto no estático. En mi caso, esto no era cierto. – jazzbassrob

7

Declarar Y como estático para evitar la creación de instancia de X.

public class X 
{ 
    public static class Y { 
    } 
} 
Cuestiones relacionadas