我想扩展 Button
类来创建一个名为“LabeledButton
”的 singleton 类,它还有一个 String
属性称为 label
。
到目前为止我得到了:
static public class LabeledButton extends Button {
String label;
private LabeledButton(String label) {
this.label = label;
}
static public LabeledButton getInstance(String label) {
if(current == null)
current = new LabeledButton(label);
return current;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
}
但这就是我在构造函数中遇到的错误:
There is no default constructor available in 'android.widget.Button'
我做错了什么?
最佳答案
Default Constructor 是没有任何参数的构造函数,在没有提及其他构造函数的情况下由 Java 编译器隐式引入。
每当您扩展任何给定类时,在创建对象时,首先调用父类构造函数。在父类不提供无参数构造函数的情况下,您将必须明确告知要调用哪个参数化构造函数。
如错误中所述
There is no default constructor available in 'android.widget.Button'
在当前上下文中因为您正在扩展 Button,它恰好没有默认(无参数)构造函数。
Button(Context context)
Button(Context context, AttributeSet attrs)
Button(Context context, AttributeSet attrs, int defStyleAttr)
Button(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)
是唯一暴露的。 Android Button Documentation
因此您必须显式调用参数化构造函数之一。
public class LabeledButton extends Button {
String label;
public LabeledButton(Context context, String label) {
super(context); // Explicitly Invoking the parent parameterized constructor
this.label = label;
}
}
关于java - 扩展 Button 类以创建单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41621102/