【发布时间】:2016-01-06 07:34:56
【问题描述】:
我想创建一个类: - 只有一个实例 - 在我的应用程序的整个生命周期中都可以访问。 - 类不必被垃圾收集器销毁。
我可以通过使用静态或单例模式来实现吗?
谢谢
【问题讨论】:
-
单身人士应该这样做。
标签: java class static singleton
我想创建一个类: - 只有一个实例 - 在我的应用程序的整个生命周期中都可以访问。 - 类不必被垃圾收集器销毁。
我可以通过使用静态或单例模式来实现吗?
谢谢
【问题讨论】:
标签: java class static singleton
你可以使用枚举单例
class MySingleton implements MyInterface {
INSTANCE;
// methods
}
理想情况下,这样的单例应该是无状态的。有状态的单例在单元测试中很难/容易出错。
如果它不是无状态的,我建议改用依赖注入。即在您的应用程序加载时创建一次对象并将其传递给所有需要它的实例。
【讨论】:
确保类不会被垃圾回收的方法是确保它保持可访问性。你可以:
实际上,除非您的类是使用您自己创建的类加载器动态加载的,否则该类不太可能被 GC 卸载/销毁。
另一方面...如果你真的担心单例instance(不是类)被垃圾收集,单例设计模式的正常实现照顾好这个:
public class MySingleton {
private static Integer instance = new Integer(42);
public static Integer getInstance() {
return instance;
}
}
只要MySingleton 类保持可访问性,static 变量就可以访问...这通常是在应用程序运行的生命周期内;见上文。
public static 变量也可以使用,尽管从其他角度来看这是个坏主意。
【讨论】: