当我尝试编译下面的代码时,我收到错误“构造函数调用必须是构造函数中的第一个语句”。我在第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;
}
}
答案 0 :(得分:4)
在初始化内部你不能调用它(...或super(....只能从构造函数中调用构造函数。
通过查看现在的代码,您根本不需要初始化方法。
答案 1 :(得分:4)
您的问题恰恰是抛出错误的行不在构造函数中。 this()
只能从构造函数中调用。一旦对象已经构造就调用构造函数没有意义,因此Java不允许在构造函数之外调用构造函数。
我假设你的initialize
方法正被一些未在此处显示的构造函数调用。考虑到所有initialize
方法都会调用构造函数,为什么不从你调用initialize
的任何地方执行此操作?
答案 2 :(得分:4)
不允许从其他任何地方调用构造函数(或super
构造函数),但在构造函数中它是自己的。换句话说,您不能从构造函数之外的其他方法调用this()
。
答案 3 :(得分:2)
this()
语法仅用于从构造函数调用另一个构造函数。您的initialise
方法不是构造函数。
我不确定你真的想在这里做什么,但要么要
super.initialise()
而非this()
或initialise
方法另请注意,您的initialise
方法是private
,并且该代码中没有任何内容可以调用它,因此它无用(不会被调用)。