java 内部类中 static (内部类对象成员)

来源:互联网 发布:android things 知乎 编辑:程序博客网 时间:2024/05/16 12:36

项目中需要使用到内部类,对外隐藏实现细节,代理类提供访问接口。见以下代码:


上面的代码有一行标注了 error ,表示这一行将通不过编译。让我们来揭示原因。

首先,要明确一点,java 的内部类如果不是 static 的,必须经过外层类的构造才会被构造出来,即,每构造一个内部类,都会产生一个内部类。则只有在定义了一个 A对象 a 的情况下,才会产生 B 这个类,设想一下,如果内部类声明了一个static B 对象成员 b ,那么,就要求 B 这个类一定要被编译器提前知道,具体多提前呢,应该是所有类依赖,重定位解决后,但肯定是在所有非 static 对象定义之前,此时b 的存在就是个疑问了,从语意角度来讲,b 是在 a 构建之后存在的,但从编译器角度讲,b 必然又在 a 之前构建,所以就矛盾了,编译器当然不会放过你。

正确的写法应该将 B 类声明为 static ,这样不仅可以解决上面的问题,而且效率也提高不少,因为 B 类一直存在,不会每次构造一个 A 对象就重新生成一个 B 类。

0 0
原创粉丝点击