基本上我有一个类,它的实例是通过 Singleton 类创建的。该类不应该通过单例类以外的任何其他方式实例化。我的问题是,除了 Singleton 之外,其他班级能否有效地“看不到”该班级。
我知道内部课程和不同的包装等会有所帮助,但我很想知道是否有人对此有很好的解决方案。
感谢您的回复
只需将类本身重构为单例即可。私有构造函数等
Java 没有像 C++ 那样的“朋友”概念
您提到了嵌套类(真正的内部类不起作用,因为它们需要外部)和包。
我不知道保护其他类的其他方法,但一种是创建实例。
但总的来说,没有理由通过辅助类构建单例。
您可以使用枚举或静态最终变量构建单例
public enum Elvis implements HasAge {
INSTANCE;
private int age;
@Override
public int getAge() {
return age;
}
}
class X {
public static final X instance = new X ();
private X () {
}
...
}
在示例场景中,使用您的 API,我需要声明吗?:
ToBeInvisibleClass instance = TheSingleton.getThatInvisibleInstnace();
如果答案是Yes,那么您的问题的答案是No因为我需要声明一个变量并且为此我需要类型可见。如果答案是No,那么使用内部/嵌套类似乎是一种正确的方法,或者使类本身成为单例。
使用枚举执行单例的一种简单有效的方法:
public enum Singleton {
INSTANCE;
public void execute (String arg) {
//... perform operation here ...
}
}
为确保仅通过您的类方法进行实例化,您可以执行以下操作:
在这个网站上有一个很好的例子:
public class MySingleton {
private static MySingleton _instance = new MySingleton();
private MySingleton() {
// construct object . . .
}
public static MySingleton getInstance() {
return _instance;
}