如何找到创建Java单例实例的位置?
A Singleton通常有一个私有的构造函数,因此Singleton类是唯一可以实例化唯一的单例实例的类。
e编辑。请阅读 – recoInrelax
@recolnrelax您可以请添加一个片段,显示您实际上做了什么。 (我不明白该部分'分配给该单身人士的变量) – stacker
我没有读它的权利。 “Singleton类是唯一可以实例化唯一的单例实例的类”我现在明白了:p抱歉 – recoInrelax
这是singleton class
开发者负有责任,以确保该实例被多个电话重用。
作为用户,您不应该担心。
class Singelton
{
private static Singelton _singelton = null;
private Singelton()
{
}
// NOT usable for Multithreaded program
public static Singelton CreateMe()
{
if(_singelton == null)
_singelton = new Singelton();
return _singelton;
}
}
现在,从你的代码的任何地方,你可以实例Singelton
,有多少次你喜欢,每次将其分配给不同的参考。但c'tor只被调用一次。
我会用一个enum
enum Singleton {
INSTANCE:
}
或类似的东西不能被实例化不止一次和全局访问更多。
命名创建/返回单身人士的方法的一般做法是getInstance()
。当你无法在创建单例的代码中找到该位置时,我不理解这种情况,但可以搜索此方法名称。
如果你想捕捉创建单身人士的确切时刻 - 你可以使用AOP。 AspectJ是java中的一个很好的例子。您将能够在创建课程之前/之后执行您的代码或调用getInstance()
方法。
如果您的问题是关于重复使用创建的单身人士,然后搜索此网站。 For example
你想知道哪个调用实例化单例(假设懒惰实例化)?如果是这样,您可以修改单例以在调用构造函数时存储/记录堆栈跟踪。 –