初始化按需使用Holder惯用法给出了NoClassDefFoundError

时间:2012-09-27 08:21:05

标签: java singleton lazy-loading

我正在尝试在我的代码中实现初始化按需持有者习惯用于数据库连接管理器以进行延迟加载

Class ConfigurationAgent{
private ConfigurationAgent(){
    String baseDir = "XYZ";
}
private static class LazyLoader{
    private static final ConfigurationAgent instance = new ConfigurationAgent();
}
public static ConfigurationAgent getInstance(){
    ConfigurationAgent cfg = LazyLoader.instance;
    return cfg;
}
}

现在我使用下面的代码从另一个类调用此ConfigurationAgent的实例:

ConfigurationAgent agent = ConfigurationAgent.getInstance();

在这种情况下,我收到ExceptionInInitializerError,后跟java.lang.NoClassDefFoundError错误。

我的猜测是静态类LazyLoader没有正确加载,因为调用" LazyLoader.instance"提出这个问题。 (此问题在以下wiki链接中提及,没有任何解决方案http://en.wikipedia.org/wiki/Initialization_on_demand_holder_idiom) 请让我知道如何解决此问题

1 个答案:

答案 0 :(得分:2)

正如问题评论中所写:很可能在构造函数中抛出了异常,然后显示为java.lang.NoClassDefFoundError。检查堆栈跟踪。

(我遇到了同样的问题,SO帮助仔细研究了构造函数,我喜欢接受答案的问题,所以这是我的综述。)