java中如何参数化泛型单例

2024-05-16

我有下一个问题。我有一个界面:

public interface Worker<T> {
    public void start(Class<? extends T> taskClass);
}

以及该接口的单例实现:

public final class Listener<T extends Runnable> implements Worker<T> {
    private Listener() {}

    @Override
    public void start(Class<? extends T> taskClass) { ... }

    public static Listener getInstance() {
        return SingletonHolder.INSTANCE;
    }

    private static class SingletonHolder {
        public static final Listener INSTANCE = new Listener();
    }
}

我的问题是,我可以通过这种方式获取单例实例:

Worker<Thread> listener = Listener.getInstance();

仍然是类型安全的吗?如果不是,我如何在单例实例中使用泛型来实现类型安全?


所有泛型都会在运行时被剥离。

这意味着您只会拥有一个static class SingletonHolder并且只有一个INSTANCE不管通用是什么。

为了克服这个问题,如果有意义的话,您可以拥有“多个单例”。您必须添加某种注册,因此,如果您尝试获取尚不存在的注册,请在返回之前创建并存储它。请注意,这尚未编译,并且可能存在一些问题,但基本方法仍然相同。

public final class Listener<T extends Runnable> implements Worker<T> {
    private Listener() {}

    @Override
    public void start(Class<? extends T> taskClass) { ... }

    public static Listener getInstance(Class<T> clazz) {
        return SingletonHolder.INSTANCE.get(clazz);
    }

    private static class SingletonHolder {
        private static final Map<Class<? extends Runnable>,Listener<? extends Runnable> INSTANCE = new ...;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java中如何参数化泛型单例 的相关文章

随机推荐

  • 在 mongodb 和 nodejs 中对博客和评级进行建模

    我有一个博客集合 其中包含用户给予的标题 正文和综合评分 另一个集合 评级 其架构引用了博客 以对象 ID 的形式对博客进行评级 如果有的话 的用户以及他们给出的评级 即 1 或 1 当特定用户按照 最新优先 的顺序浏览博客时 比如每页 4
  • Java 动画中的跳跃和撕裂

    以下代码绘制一个正方形 其中两个较小的正方形在其中旋转 每当你点击键盘上的箭头时 整个系统就会朝那个方向移动 然而 我遇到了一些图像撕裂和有时跳过的问题 它很小但仍然存在 我想知道是否有人知道如何在不大规模更改代码的情况下解决这些问题 im
  • 使用 CounterClockwise 和 Eclipse 在 Clojure REPL 中进行评估

    我通常使用 Emacs 但受到启发再次尝试 CCW Eclipse 我有一个 Clojure 测试项目 其源文件 src user clj 包含以下内容 ns user println hi 我有一个 REPL 我从 Window gt S
  • 如何让 LinqToXSD 正确输出命名空间前缀声明?

    我正在尝试创建 XML 数据绑定类LinqToXSD http linqtoxsd codeplex com 以及包含许多导入模式的 XML 模式 所有的模式都是位于这里 http www spiraltechinc com Tmats 为
  • fwrite 将错误指示器放在 C 中的流上

    在什么情况下 函数 fwrite 会将错误指示符放入流中 以便 Ferror 将返回 true 具体来说 我想知道当所有字节未成功写入时它是否会出错 请提供一个链接 说明您从哪里获取信息 谢谢 如果发生任何错误 流的错误指示器将被设置 并且
  • 我可以使用 HTTP 范围标头“有意”加载部分文件吗?

    我正在研究 HTTP 范围标头 specs http www w3 org Protocols rfc2616 rfc2616 sec14 html sec14 16 据我了解 我可以设置文件的字节范围ala 0 199 2000 200
  • 使用 Java 文件中的代码编译 Java 文件

    我目前正在创建一个个人 也许是公共 java 终端 我想创建一个在执行时创建 编译 Java 文件的命令 但我不太确定如何实际执行此操作 是否可以 或者我只是在做梦 你也可以使用Groovy http groovy codehaus org
  • Backbone Marionette CompositeView 排序列表 - 在添加时呈现额外的模型

    这是小提琴 http jsfiddle net QhQ8D 10 http jsfiddle net QhQ8D 10 代码在下面 制作一个聊天应用程序 需要一个排序的 连接的用户列表 名称上带有比较器的图形集合连接到 CompositeV
  • C++:获取器和设置器?

    我正在尝试编写一些代码来为以下数据的 ID 号 名字 姓氏 期中成绩和期末成绩创建 getter 和 setter 这些数据位于我正在编写的班级的文本文件中 10601 ANDRES HYUN 88 91 94 94 89 84 94 84
  • Android STFP 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在我的 Android 项目中使用 SFTP 安卓已经有了吗 SFTP 库 还是我必须实现它 I
  • Postgresql 串行错误自动增量

    我在 postgresql 上遇到问题 我认为 postgresql 中有一个错误 我错误地实现了一些东西 有一个表包括colmn1 primary key colmn2 unique colmn3 插入一行后 如果我尝试使用现有的另一次插
  • 具有不同数量查询参数的两种 GET 方法:REST

    我有一个 Rest 端点类 如下所示 Path sports public interface SportsEndpoint GET List
  • 无法将 minicom 的输出保存到文件中

    当我使用Minicom从串口捕获数据时 我需要将大数据保存到一个文件中 名为minicom cap 但是 如果我按 Ctrl A 和 L 来捕获文件 则失败 没有创建文件 minicom cap之前并不存在 我的下载目录已正确创建 我的操作
  • PyLaTeX: pylatex.errors.CompilerError: 未找到 LaTex 编译器

    我正在尝试运行确切的代码here https jeltef github io PyLaTeX current examples basic html the code获取 pylatex 工作的示例 在我正在工作的目录中 我已从链接复制并
  • 为什么我收到的数据包数据大小大于mss?

    我在两台 PC 上使用 ifconfig ethX mtu 300 修改了 MTU 并使用 netperf 测试网络 我用 WireShark 嗅探了 SYN 数据包中的 MSS 260 但我得到了一些大于 260 的数据包 为什么 嗅探器
  • 无法解析 ^ 字符

    好的 现在我可以解析空间 这是我之前的问题 现在我的解析器几乎准备好了 但有一个我无法找出的缺陷 我能够检索段后的数据 参见代码 和管道之间的数据 我无法达到的是升级并检索包含在管道之间并由 分隔的数据 Eg Input String is
  • 通过 XML 将重复事件添加到 Google 日历

    我正在尝试通过协议 API 将重复事件添加到我的日历中 我从在 Google 界面中创建的事件中获取了重复标记的语法 并将其用于我的创建请求中 这是我提交的内容
  • 如何在 Java Spring 中模拟 RestTemplate?

    public class ServiceTest Mock RestTemplate restTemplate new RestTemplate InjectMocks Service service new Service Respons
  • Django SessionWizardView不执行done方法

    我无法让我的 SessionWizardView 工作 当我提交最后一步时 向导跳回第一步 不执行done方法 views py class CvWizardView CookieWizardView form list InfoPerso
  • java中如何参数化泛型单例

    我有下一个问题 我有一个界面 public interface Worker