我有一个Outer
类具有private Inner
类。的Java:私有内部类合成构造
以我Outer
类方法,我实例化Inner
类,如下所示:
Outer outer = new Outer();
Inner inner = outer.new Inner();
编译器的代码转换为:
Outer outer = new Outer();
Inner inner = new Inner(outer, null);
使用反射表明Inner
类具有以下合成构造函数:
private Outer$Inner(Outer)
Outer$Inner(Outer,Outer$Inner)
由于Inner
类是private
,编译器补充说private
构造它,因此没有人可以实例化类。但显然Outer
类应该能够实例化它,因此编译器添加了其他包私有构造函数,该构造函数又调用私有构造函数。另外,由于包名 - 私有构造函数的名称中包含$
,因此普通Java代码无法调用它。
问:为什么合成一个私人和一个包私有构造?为什么不综合包私有构造函数,并完成它?
@Noofiz这些构造函数是由编译器创建的,没有你明确地编码它们;因此我称他们为合成。 – shrini1000 2013-03-04 10:42:34
@Noofiz如果你不明白这个问题,我建议你把它留给那些做的人。 – EJP 2013-03-04 10:43:00
“外部$内部(外部,外部$内部)”是否真的正确?构造函数获取与参数相同的类的实例?为什么编译器会添加这样一个参数。 – 2013-03-04 11:10:09