我希望这不是一个愚蠢的问题。
拥有 3 个基本构造函数
public MyClass(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public MyClass(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public MyClass(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
每个都首先调用super
类构造函数。那么这是否意味着我必须将所有常见的构造函数代码放入这样的私有方法中?:
public MyClass(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
common(context);
}
public MyClass(Context context, AttributeSet attrs) {
super(context, attrs);
common(context);
}
public MyClass(Context context) {
super(context);
common(context);
}
private void common(Context context) { ... }
我虽然可以为公共代码链接构造函数,但我得到一个错误,说构造函数调用必须是代码中的第一个语句。
public MyClass(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this(context, attrs);
}
public MyClass(Context context, AttributeSet attrs) {
super(context, attrs);
// Some code
this(context);
}
public MyClass(Context context) {
super(context);
// Some more code
}
而第一个语句要么是超级构造函数调用,要么是类构造函数调用,不能两者兼有。
Constructor call must be the first statement in a constructor