2011-08-16 73 views
5

我是Eclipse和Java的新手。在eclipse中生成錯誤

我想知道如果以下是Eclipses編譯器或我的安裝中的錯誤。

我已經在公共類中定義了一個公共類來定義服務方法的返回類型。

public class ServiceThing { 
    public class ReturnType {...} 
    public ReturnType serviceMethod (...) {...} 
    ... 
} 

在我調用服務方法我instatiate一個返回類型來保存默認消息類:

ReturnType returnType = new ReturnType(...); 

當嘗試建立這個我得到以下錯誤:

大廈工作區: 構建期間發生錯誤。 錯誤在項目'XXXX.android'上運行構建器'Java Builder'。 java.lang.ArrayIndexOutOfBoundsException

保存失敗: 保存失敗; 顯示java.lang.NullPointerException

我發現所需的語法是:

ServiceThing serviceThing = ...; 
ReturnType returnType = serviceThing.new ReturnType(...); 

但是,編譯器不應該反正產生一個NullPointerException。

+0

請問爲什麼你需要公開課上的公開課?如果公衆的話,爲什麼不把它當成一個獨立的課程。 – Gapton

+1

這只是爲了強烈表明該班的意圖。這純粹是用於服務調用的返回類型。 如果我把它放入sparate文件中,我認爲它看起來很亂,因爲它本身沒有生命 – bitestar

回答

4

通過使ReturnType一個public static class你會擺脫參考父實例和你

ReturnType returnType = new ReturnType(...); 

如你預期它會奏效。

沒有static子類的修飾符實例包含對其父對象的隱式引用。這就是爲什麼在這種情況下需要ServiceThing實例來創建ReturnType的實例的原因。

+0

好的答案。這個解決方案實際上在第22項中的[有效Java,第二版](http://java.sun.com/docs/books/effective/)中贊同:支持非靜態靜態成員類。 我仍然認爲編譯器應該寫下這個錯誤消息:不可能創建一個非靜態成員類的實例,而不需要包含實例。 – bitestar