2011-08-29 41 views
0

當我嘗試編譯下面的代碼時,我收到錯誤「構造函數調用必須是構造函數中的第一個語句」。我收到錯誤在線this(text, style, font, colour, backgroundBitmap);單身人員類沒有編譯

Im不在構造函數內,即時只是試圖從初始化方法調用它。

public class TimerLabelFieldSingleton extends TimerLabelField{ 

    private TimerLabelFieldSingleton ref; 

    private TimerLabelFieldSingleton(Object text, long style, Font font, 
      int colour, Bitmap backgroundBitmap) { 
     super(text, style, font, colour, backgroundBitmap); 
    } 

    private void initialise(Object text, long style, Font font,int colour, Bitmap backgroundBitmap){ 
     this(text, style, font, colour, backgroundBitmap); 
    } 

    public TimerLabelFieldSingleton getSingletonObject(Object text, long style, Font font,int colour, Bitmap backgroundBitmap){ 
     if(ref == null){ 
      ref = new TimerLabelFieldSingleton(text, style, font,colour, backgroundBitmap); 
     } 
     return ref; 
    } 


} 
+0

剛纔已經意識到,被調用getSingletonObject何時發生初始化。感謝您的回答 –

+0

這是一個語法錯誤。 – umbr

回答

4

不允許從其他地方,但在構造它自身調用構造函數(或super構造函數)。換句話說,您不能從構造函數以外的其他方法調用this()

4

裏面初始化你不能說這(...或超(....構造函數只能從構造函數中調用。

通過看你的代碼,因爲它現在是,你不需要初始化方法

4

你的問題恰恰在於,引發錯誤的行不在構造函數中this()只能從構造函數中調用一旦對象已經調用就沒有意義調用構造函數因此Java不允許在構造函數外調用構造函數。

我假設你的initialize方法被一些構造函數調用,這裏沒有顯示。考慮到所有的initialize方法確實是調用一個構造函數,爲什麼不從你呼叫的任何地方執行initialize

+0

是的,只是調用getSingletonObject。 –

2

this()語法僅用於從構造函數調用另一個構造函數。您的initialise方法是不是構造函數

我不知道你真正想在這裏做,但你要麼

  • 通話super.initialise(),而不是this()
  • 做一些其他的初始化在initialise方法

另外要注意,你的initialise方法是private,並沒有在該代碼調用它,所以它是無用的(W永遠不會被稱爲)。