单例类不编译

时间:2011-08-29 16:07:38

标签: java compiler-errors

当我尝试编译下面的代码时,我收到错误“构造函数调用必须是构造函数中的第一个语句”。我在第this(text, style, font, colour, backgroundBitmap);

收到错误

我不在构造函数中,我只是试图从初始化方法调用它。

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;
    }


}

4 个答案:

答案 0 :(得分:4)

在初始化内部你不能调用它(...或super(....只能从构造函数中调用构造函数。

通过查看现在的代码,您根本不需要初始化方法。

答案 1 :(得分:4)

您的问题恰恰是抛出错误的行不在构造函数中。 this()只能从构造函数中调用。一旦对象已经构造就调用构造函数没有意义,因此Java不允许在构造函数之外调用构造函数。

我假设你的initialize方法正被一些未在此处显示的构造函数调用。考虑到所有initialize方法都会调用构造函数,为什么不从你调用initialize的任何地方执行此操作?

答案 2 :(得分:4)

不允许从其他任何地方调用构造函数(或super构造函数),但在构造函数中它是自己的。换句话说,您不能从构造函数之外的其他方法调用this()

答案 3 :(得分:2)

this()语法仅用于从构造函数调用另一个构造函数。您的initialise方法不是构造函数

我不确定你真的想在这里做什么,但要么

  • 致电super.initialise()而非this()
  • 在您的initialise方法
  • 中进行其他初始化

另请注意,您的initialise方法是private,并且该代码中没有任何内容可以调用它,因此它无用(不会被调用)。