2013-04-22 96 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";