基本上我有一个类,它通过Singleton类创建一个实例。该类不应该通过除单例类之外的任何其他方式实例化。我的问题是除了辛格尔顿之外,其他班级能否有效地“看不到”这个班级。
我知道内部课程和不同的pacakages等会有所帮助,但我很想知道是否有人有一个很好的解决方案。
感谢您的回复
答案 0 :(得分:2)
只需将类本身重构为单例。私人构造函数等。
答案 1 :(得分:1)
Java没有像C ++这样的“朋友”概念
您提到嵌套类(真正的内部类将无法工作,因为它们需要外部)和包。
我不知道保护其他类但保护其他类的其他方法,但我不知道。
但总的来说,没有理由通过助手类构建单例。
您可以使用枚举或静态最终变量
构建单身人士What is the best approach for using an Enum as a singleton in Java?
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 () {
}
...
}
答案 2 :(得分:1)
在示例场景中,使用您的API 我是否需要声明?:
ToBeInvisibleClass instance = TheSingleton.getThatInvisibleInstnace();
如果答案是是,那么您的问题的答案是否,因为我需要声明一个变量,为此我需要类型可见。如果答案是 No ,那么使用内部/嵌套类似乎是一种正确的方法,或者使类本身成为单例。
答案 3 :(得分:1)
使用Enum执行Singleton的简单有效方法:
public enum Singleton {
INSTANCE;
public void execute (String arg) {
//... perform operation here ...
}
}
答案 4 :(得分:1)
要确保仅通过类方法进行实例化,您可以执行以下操作:
In this site有一个很好的例子:
public class MySingleton {
private static MySingleton _instance = new MySingleton();
private MySingleton() {
// construct object . . .
}
public static MySingleton getInstance() {
return _instance;
}