有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从接口访问对Singleton的引用,可以吗?

假设您有一个单例A,其getInstance()抛出一些异常

进一步假设A在整个程序中到处都使用,虽然A.getInstance().doSomethingUseful()很好,但是很多代码都是从Constants接口继承的,我想声明:

A a = A.getInstance()Constants中,允许实现Constants访问a的每个人

不过,正如所料,Java抱怨该方法抛出异常,因此无法在接口中声明

是否有解决方法


共 (2) 个答案

  1. # 1 楼答案

    我觉得这真的不是个好主意。您试图将该对象的生命周期直接绑定到实现该接口的类的结构中

    如果必须使用单例,那么最好通过getInstance()方法显式引用它。这是相对直观的。如果必须的话,让实例化异常运行时

    更好的是接受单模式被认为是anti-pattern的前提,并考虑诸如injection-of-control之类的替代方案。

  2. # 2 楼答案

    只需将选中的异常转换为未选中

    static A getInstanceA2() throws Error
    {
        try
        {   return A.getInstance();   }
        catch(Exception e)
        {   throw new Error(e);   }
    }
    
    interface Constants
    {
        A a = getInstanceA2();
    }
    

    如果getInstane()失败,接口Constants将被破坏,你的应用程序可能会崩溃

    如果AContants之间存在循环依赖关系,A可能会在Constants中观察到一些未初始化的静态字段