これがばかげた質問ではないことを願っています。
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