扩展Button类以创建单例

时间:2017-01-12 19:12:38

标签: java android button singleton

我想扩展Button类来创建名为" LabeledButton"的单身类。它还会有一个名为String的{​​{1}}属性。

到目前为止,我得到了:

label

但那是我在构造函数中得到的错误:

  

' android.widget.Button'

中没有默认构造函数

我做错了什么?

2 个答案:

答案 0 :(得分:4)

默认构造函数是没有任何参数的构造函数,如果没有提及其他构造函数,则由Java编译器隐式引入

每当扩展任何给定的类时,在创建对象时,首先调用父类构造函数。在Parent类不提供no args构造函数的情况下,您必须明确告知要调用哪个参数化。

如错误中所述

There is no default constructor available in 'android.widget.Button'

在当前上下文中因为你正在扩展Button,它没有默认(No args)构造函数。

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;
    }
}

答案 1 :(得分:2)

如错误所示,您需要为Button class添加默认构造函数,请尝试将构造函数更改为以下内容。

public class LabeledButton extends Button {
    String label;

    public LabeledButton(Context context, String label) {
        super(context);
        this.label = label;
    }

    static public LabeledButton getInstance(Context context, String label) {
        if(current == null)
            current = new LabeledButton(context, label);
        return current;
    }
}