防止来自其他类的类实例化

时间:2015-04-04 17:28:38

标签: java class oop design-patterns instantiation

我正在使用域名,视图和控制器。每个都包含自己的类。

域包含许多不应在域外的类中实例化的类。我的印象是默认的访问修饰符会帮助我。使我的域类的构造函数包可见。

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

如何防止这种情况发生?

2 个答案:

答案 0 :(得分:3)

当你说'在导入正确的package.class文件后,任何类仍然可以使用构造函数'。我想你在谈论反思。 反射是一个强大的概念,允许任意实例化类,即使它们只提供私有构造函数。 没有办法阻止某人使用反射来实例化你的类。可以使用反射绕过类或构造函数修饰符(如private或protected)。

答案 1 :(得分:1)

如果你想从类外部控制一个类的实例化,你可以创建它的构造函数private,如 -

class A{

   private A(){
      // do some thing
   } 

   public static getInstance(){

   }
}   

现在,现在可以从类的外部创建A类的实例。但是如果外部世界真的需要一个类的实例,那么他们可以使用静态方法getInstance()。这种结构可以防止外部世界使用new关键字创建类的实例。

希望它会有所帮助。
感谢。