我有一個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