我希望這不是一個愚蠢的問題。
具有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
您可以使用'this'來鏈接構造函數,並將初始化代碼鏈接到最後一個構造函數中。 – Luksprog 2013-04-28 14:47:35