gpt4 book ai didi

java - 从抽象类构建单例

转载 作者:行者123 更新时间:2023-12-02 05:45:30 25 4
gpt4 key购买 nike

简而言之,我正在尝试构建抽象类的子类,所有这些子类都是单例。我想将单例“逻辑”放在父类(super class)中。这在Java中可能吗?这是代码:

public abstract class Table {
//the static singleton instance. this will be inherited by subclasses of this class.
protected static Table m_Instance;

/**
* @param tableName the database table name.
*/
protected Table(String tableName, List<Column> columns) {
TABLE_NAME = tableName;
if(columns != null) {
if(!m_Columns.isEmpty())
m_Columns.clear();
m_Columns.addAll(columns);
} else {
throw new IllegalStateException("the columns list was null. this is a developer error. please report to support.");
}
}

protected static Table getInstance() {
if(m_Instance == null)
m_Instance = <? extends Table>;
}
}

这里只是一个说明实现的简介:

public class CallTable extends Table {
//this class would inherit 'getInstance()' and the method would return a 'CallTable' object
}

最佳答案

Table 类只会有一份副本(抛开多个类加载器等!),因此只会有一个值 m_Instance

这意味着您不能拥有每个子类的单例 - 只能拥有任何一个子类的单例。

可以处理多个子类,例如通过将它们存储在父类(super class)的 Map 中并按类查找它们,但复杂性可能不值得。

无论哪种情况,getInstance 方法都会返回一个 Table,因此您会失去类型安全性 - 您可能需要继续从 Table 进行转换例如,CallTable。 Java的类型系统不支持这种情况。

还请注意,至少可以说,单例模式是有争议的,许多人都试图避免它。

关于java - 从抽象类构建单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24104273/

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