gpt4 book ai didi

java - 基本构造函数链接调用

转载 作者:行者123 更新时间:2023-11-29 10:03:24 25 4
gpt4 key购买 nike

我希望这不是一个愚蠢的问题。
拥有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 类的构造函数。那么这是否意味着我必须将所有常见的构造函数代码放入这样的私有(private)方法中?:

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)代码链接构造函数,但我收到一条错误消息,指出构造函数调用必须是代码中的第一条语句。

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
}

并且第一个语句要么是 super 构造函数调用,要么是类构造函数调用,不能两者都是。

Constructor call must be the first statement in a constructor

最佳答案

最好的方法是使用 this() - 你不需要创建新方法,并且你尊重 DRY 原则(不要重复自己)

    public MyClass(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// your code here
}

public MyClass(Context context, AttributeSet attrs) {
// Assuming 0 is the default value of defStyle, else pass the default value
this(context, attrs, 0);
}

public MyClass(Context context) {
// Assuming null is the default value for attrs
this(context, null);
}

关于java - 基本构造函数链接调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16264000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com