枚举实现单例模式怎么传参数?

import controller.ReadXMLConfig;

public enum XMLDataCollection {

    INSTANCE;
    
    private ReadXMLConfig instance;
    
    XMLDataCollection(String xmlpath)
    {
        instance = new ReadXMLConfig(xmlpath);
    }
    
    public ReadXMLConfig getInstance()
    {
        return instance;
    }
    
}


比如这样子,,new ReadXMLConfig(xmlpath),这不就要求ReadXMLConfig构造方法公开了吗,还怎么保证自己是单例?

不传参数又怎么知道要读哪个xml,网上都找不到例子参考。
阅读 6.3k
3 个回答

我劝你还是多看看单例相关的博文吧,网上很多的。

由于 priavte 只能在类内部访问,所以单例一般都是这个类自己的单例,也就是说,ReadXMLConfig 的单例通常是通过 ReadXMLConfig.getInstance() 来实现,而不是另一个类的 getInstance() 来实现。

Spring 中配置的配置的单例除外,那个是单例由框架来保证,而不是由语法来保证。

实现接口的enum单例(接口省略)

public enum Singleton implements MySingleton {
  INSTANCE;

  @Override
  public void doSomething() {
    System.out.println("complete singleton");
  }

  public static MySingleton getInstance() {
    return Singleton.INSTANCE;
  }
}

查找下枚举的实现逻辑。

想清楚你是想要 ReadXMLConfig 的单例还是 XMLDataCollection 的单例,为什么要混到一起呢。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题