java从接口访问对Singleton的引用,可以吗?
假设您有一个单例A
,其getInstance()
抛出一些异常
进一步假设A
在整个程序中到处都使用,虽然A.getInstance().doSomethingUseful()
很好,但是很多代码都是从Constants
接口继承的,我想声明:
A a = A.getInstance()
在Constants
中,允许实现Constants
访问a
的每个人
不过,正如所料,Java
抱怨该方法抛出异常,因此无法在接口中声明
是否有解决方法强>
# 1 楼答案
我觉得这真的不是个好主意。您试图将该对象的生命周期直接绑定到实现该接口的类的结构中
如果必须使用单例,那么最好通过
getInstance()
方法显式引用它。这是相对直观的。如果必须的话,让实例化异常运行时更好的是接受单模式被认为是anti-pattern的前提,并考虑诸如injection-of-control之类的替代方案。
# 2 楼答案
只需将选中的异常转换为未选中
如果
getInstane()
失败,接口Constants
将被破坏,你的应用程序可能会崩溃如果
A
和Contants
之间存在循环依赖关系,A
可能会在Constants
中观察到一些未初始化的静态字段