2011-08-29 73 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永远不会被称为)。