防止 class 从其他 classes 实例化

Preventing class instantiation from other classes

我正在使用域、视图和控制器。每个都包含自己的 classes.

该域包含许多不应在域外的 classes 中实例化的 classes。我的印象是默认访问修饰符会帮助我。让我的域 class 看到它们的构造函数包。

事实证明,在导入正确的 package.class 文件后,任何 class 仍然可以使用构造函数。

如何防止这种情况发生?

当你说 'Turns out any class can still use the constructors after importing the right package.class file.' 我猜你是在谈论反射。 反射是一个强大的概念,允许 classes 的任意实例化,即使它们只提供私有构造函数。 无法阻止某人使用反射来实例化您的 classes。 class 或构造函数修饰符,例如 private 或 protected 可以使用反射绕过。

如果您想从 class 外部控制 class 的实例化,那么您可以创建它的构造函数 private,例如 -

class A{

   private A(){
      // do some thing
   } 

   public static getInstance(){

   }
}   

现在可以从 class 的外部创建 class A 的实例。但是如果外部世界确实需要 class 的实例,那么他们可以使用静态方法 getInstance()。此构造可防止外部世界使用 new 关键字创建 class 的实例。

希望对您有所帮助。
谢谢