可能是重复的问题。但是我需要实现类似的东西
@Singleton
public class Person {
}
这将确保只有一个 Person 对象实例。
一种方法是将构造函数设为私有。但这使得 Singleton 注释变得多余。
我真的不明白我是否真的可以在不将构造函数设为私有的情况下将对象创建限制为单个对象。
这可能吗?
原文由 user1401472 发布,翻译遵循 CC BY-SA 4.0 许可协议
可能是重复的问题。但是我需要实现类似的东西
@Singleton
public class Person {
}
这将确保只有一个 Person 对象实例。
一种方法是将构造函数设为私有。但这使得 Singleton 注释变得多余。
我真的不明白我是否真的可以在不将构造函数设为私有的情况下将对象创建限制为单个对象。
这可能吗?
原文由 user1401472 发布,翻译遵循 CC BY-SA 4.0 许可协议
public class ASingletonClass {
private static ASingletonClass instance = null;
private ASingletonClass() {
}
public static ASingletonClass getInstance() {
if (instance == null) {
instance = new ASingletonClass();
}
return instance;
}
}
这才是正确的单例实现方式。注释不能阻止人们调用公共构造函数。
原文由 Cruncher 发布,翻译遵循 CC BY-SA 4.0 许可协议
8 回答6.4k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
3 回答1.6k 阅读✓ 已解决
没有注释可以阻止类被实例化。但是,如果您打算实现依赖注入框架之类的东西,或者只是一个简单的对象工厂,那么您可以使用反射来读取注释并防止该类被多次实例化,但我知道这不是您的答案正在寻找。
实际上,您可以考虑放弃单例模式并转向一些更现代的解决方案,例如适当的 DI 框架,这可以为您提供相同的结果 - 具有更大的灵活性。