javac 對於私人內部類的奇怪處理

來源:互聯網
上載者:User

今天同學遇到一個奇怪的問題,讓我幫他看,結果發現了一個 javac 的處理小 bug 。

 

看這段代碼:

 

public class OuterClass {<br /> private InnerClass test = new InnerClass();</p><p> private static class InnerClass {<br /> }<br />}

 

你可能認為,這段代碼編譯之後,會產生兩個 class 檔案:OuterClass.class 和 OuterClass$InnerClass.class 。但事實是,還會多產生一個 OuterClass$1.class ,即使去掉 static 修飾符也是這樣的。為什麼會這樣呢?

 

我經過上網尋找,找到的討論:
http://hi.baidu.com/digno/blog/item/cd894a630511a16a0c33faa5.html
http://72.5.124.102/thread.jspa?threadID=277695&tstart=9117
http://forums.sun.com/thread.jspa?threadID=594503

 

解決的辦法是:給 InnerClass 加上一個 public 的建構函式,或者去掉 InnerClass 的 private 修飾符。

 

public class OuterClass {<br /> private InnerClass test = new InnerClass();</p><p> private static class InnerClass {<br /> public InnerClass() {<br /> }<br /> }<br />}

 

用 Eclipse 編譯就沒有這個問題。這個問題的麻煩之處就在於:如果用 emma 測覆蓋率,那麼那個 OuterClass$1 就沒辦法覆蓋到。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.