【发布时间】:2014-11-16 07:32:13
【问题描述】:
我有一个应用程序,其中的代码有点像这样编写
public Interface SuperCLass{
//....to do some methods
}
public class BaseClass1 implements SuperCLass{
//....to do some methods
}
public class BaseClass2 implements SuperCLass{
//....to do some methods
}
现在在我的应用程序中,只能为 SuperClass 引用实例化一个对象,即同步单例。
现在,我可以加入
public static synchronized SuperCLass getInstance(){
//initialise
}
在任何基类中,但我不能在 SuperClass 接口中包含此声明,因为我无法使用超类的引用获取基类的实例。 例如 我想这样做(这是一个非常模糊的例子)
BaseClass1 bc1 = BaseClass1.getInstance();
SuperClass sc = bc1.getInstance();
现在在代码后面的某个地方
bc1=sc.getInstance();
如何做到这一点?
注意:多个线程将访问这些对象,因此必须进行同步
【问题讨论】:
-
为什么要显式转换为
SuperClass?BaseClass1继承了“接口”。 -
您的问题不清楚,但是仅仅将
synchronized放在单例工厂方法上肯定不会使您的单例线程安全。 -
您的说法“使用超类的引用取回基类的实例”不清楚。
-
@Smutje 是的,没错,但是在应用程序的某个地方,我不得不通过超类引用该对象,因为我们可能不知道该实例。在这种情况下我们可以使用 instanceOf 运算符,但我试图避免这种情况
-
@MarkoTopolnik 是的,我知道...这只是为了示例...实际上我将锁定对象
标签: java multithreading inheritance design-patterns singleton