2011-10-01 8 views
31

Pracuję nad małą aplikacją pulpitu w Netbeans. To mój pierwszy program i mam do czynienia z bardzo dziwnym typem błędu. Wiem, że zrobiłem źle, ale kilka rzeczy w stanie prześledzić, co robię źle :(Jak mogę rozstrzygnąć, że "wymagana jest obudowa zawierająca X.Y"?

Proszę mi pomóc w rozwiązaniu tego błędu

. Opis: Mam domyślny pakiet Src i tworzę nowe klasy Java . w tym pakiecie obmiarów Wraz z innymi klasami zrobiłem klasę X tak:

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 
} 

teraz trzeba utworzyć instancję jednego z wewnętrznych klas w innej klasie, która istnieje w tym samym opakowaniu, podobnie jak to :

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

ale otrzymuję następujący błąd:

an enclosing instance that contains X.Y is required

Proszę mi pomóc w rozwiązaniu tego błędu.

+0

możliwe duplikat [zamykającego instancji, który zawiera jest wymagane] (http://stackoverflow.com/questions/4297857/an-enclosing-instance-atate-contains-my-reference-is-required) –

Odpowiedz

68

Najpierw należy utworzyć obiekt klasy X (klasa zewnętrzna), a następnie użyć składni objX.new InnerClass() do utworzenia obiektu klasy Y.

spróbować

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

Wow! Dzisiaj coś wychyliłem! Dziwna składnia. Bardzo dobrze! +1 –

+1

Czy ktoś wie, dlaczego ułożył ten język w ten sposób? W jakim celu to służy? – wonton

+0

Przepraszamy za późną odpowiedź, uważam, że jest w stanie obsługiwać zarówno statyczne zagnieżdżone klasy, jak i niestatyczne klasy zagnieżdżone. Nie jestem ekspertem, ale z tego, co czytam, uważam, że jest to zmuszanie podrzędnych klas do członkostwa w instancji rodzica (niestatyczna) i tworzenie innej składni dla podrzędnych klas, które nie wymagają rodzic (statyczny). https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html – joelc

31

Chcesz zadeklarować statyczne klasy wewnętrzne: public static class Y.

+0

Z jakiego powodu? – Mahesh

+2

Ponieważ PO nie wspomniał, że musi pozostać niestateczny. Jeśli potrzebuje instancji otaczającej, komentuje błąd kompilatora, czyniąc go statycznym i dowiadując się jeszcze więcej na podstawie jego pytania. –

+2

+1 dla tej odpowiedzi - zaakceptowana odpowiedź nie jest całkowicie kompletna, ponieważ zakłada, że ​​klasa jest wymagana w kontekście niestatycznym. W moim przypadku nie było to prawdą. – jazzbassrob

7

stwierdzenie Y jako statyczną, aby uniknąć tworzenia instancji X.

public class X 
{ 
    public static class Y { 
    } 
} 
Powiązane problemy