java - 扩展 Button 类以创建单例

标签 java android button singleton

我想扩展 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/

相关文章:

java - Maven - 编译主模块时未检测到

java - getEngineByName ("JavaScript"的 ScriptEngine 为空)?

java - 当我更改 minSDKVersion 时发生 NetworkOnMainThreadException 错误

c# - 开关按钮停留在开

html - 如何创建一个像链接一样的 HTML 按钮?

java - spring-boot mvc 测试 : how to disable validation?

java - 在带有 alpha channel 的 PNG 上叠加透明颜色

android - 一个 Activity 或 fragment 必须有一个单独的加载程序来执行每个数据库操作的类型吗?

android - Activity 未在 list 中注册 Lint 警告

vba - 用户选择(工作簿和工作表名称)然后复制和粘贴