2011-12-01 58 views
3

在一个庞大复杂的程序中,可能不容易发现单个实例化的代码在 的哪个位置。跟踪创建的单例实例以便重用它们的最佳方法是什么?如何找到创建Java单例实例的位置?

问候, RR

+0

你想知道哪个调用实例化单例(假设懒惰实例化)?如果是这样,您可以修改单例以在调用构造函数时存储/记录堆栈跟踪。 –

回答

6

A Singleton通常有一个私有的构造函数,因此Singleton类是唯一可以实例化唯一的单例实例的类。

+0

e编辑。请阅读 – recoInrelax

+0

@recolnrelax您可以请添加一个片段,显示您实际上做了什么。 (我不明白该部分'分配给该单身人士的变量) – stacker

+0

我没有读它的权利。 “Singleton类是唯一可以实例化唯一的单例实例的类”我现在明白了:p抱歉 – recoInrelax

1

这是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只被调用一次。

0

我会用一个enum

enum Singleton { 
    INSTANCE: 
} 

或类似的东西不能被实例化不止一次和全局访问更多。

0

命名创建/返回单身人士的方法的一般做法是getInstance()。当你无法在创建单例的代码中找到该位置时,我不理解这种情况,但可以搜索此方法名称。

如果你想捕捉创建单身人士的确切时刻 - 你可以使用AOP。 AspectJ是java中的一个很好的例子。您将能够在创建课程之前/之后执行您的代码或调用getInstance()方法。

如果您的问题是关于重复使用创建的单身人士,然后搜索此网站。 For example