将类的可见性隐藏到其他类

时间:2012-04-14 19:00:03

标签: java oop class singleton

基本上我有一个类,它通过Singleton类创建一个实例。该类不应该通过除单例类之外的任何其他方式实例化。我的问题是除了辛格尔顿之外,其他班级能否有效地“看不到”这个班级。

我知道内部课程和不同的pacakages等会有所帮助,但我很想知道是否有人有一个很好的解决方案。

感谢您的回复

5 个答案:

答案 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; 
    }