2013-04-22 164 views
1

請原諒,如果此問題之前已被問到。 我已經在網上搜索,並在這裏堆棧溢出Java:內部類中的內部類

案例:

我停留在我的Java項目,當我嘗試使用內的另一個 一個內部類的編譯器不會編譯我的項目。

代碼:

public class outer { 
    public class middle { 
     public class inner { 
      public int variable = "8"; 
     } 
    } 
} 

聲明:

我想聲明的類是這樣的:

outer outerObject = new outer(); 
outerObject.middle middleObject = outerObject.new middle(); 
outerObject.middleObject.inner innerObject = outerObject.middleObject.new inner(); 

編譯結果:

source\start.java:8: error: cannot find symbol 
         outerObject.middleObject.inner innerObject = outerObject 
.middleObject.new inner(); 
^ 

任何答覆將不勝感激!我的意圖是不可能的,或者如果我只是做錯了什麼。

祝您有個美好的一天!

+0

Ç heck this link http://stackoverflow.com/questions/70324/java-inner-class-and-static-nested-class?rq=1 – 2013-04-22 12:41:32

回答

4

outerObject.middleObject.inner innerObject = outerObject.middleObject.new inner(); 

應該

outer.middle.inner innerObject = middleObject.new inner(); 

outerObject沒有middleObject場。不幸的是,Java允許靜態變量被限定在變量表達式中,所以你會得到一些奇怪的代碼實際編譯。

如果您堅持使用Java命名約定,這可能會更清晰。

+0

謝謝! 這解決了我的問題! 我覺得應該有這個教程。 可能有一些了,但我找不到任何。 – 2013-04-22 12:48:07

+0

@OleKristianMøller漢森指定外'new'一個內部類就是這樣一個不起眼的和毫無意義的功能,那我真的不認爲這是教程領土。 – 2013-04-22 12:56:58

+0

@OleKristianMøller漢森或許標誌着這是答案嗎? – Novaterata 2017-06-02 03:30:36

2

你的代碼將永遠不會編譯如下:

public int variable = "8"; 

該線路應該是

public int variable = 8; 

首先改變這一行。

+1

謝謝!我沒有想到這一點。 – 2013-04-22 12:47:13

+0

welcome.sometimes愚蠢的錯誤導致編譯問題。 – 2013-04-22 12:48:52

0

使用本

public class outer { 
    public class middle { 
     public class inner { 
      public int variable = 8; 
     } 
    } 
    public static void main(String[] a) { 
     outer outerObject = new outer(); 
     middle middleObject = outerObject.new middle(); 
     middle.inner innerObject = middleObject.new inner(); 
    } 
} 
0

請試試這個:

Outer outerObject = new Outer(); 
    Outer.middle middleObject = outerObject.new middle(); 
    Outer.middle.inner innerObject = middleObject.new inner(); 

你也需要改變:

public int variable = "8"; 

public String variable = "8";