我正在使用域名,视图和控制器。每个都包含自己的类。
域包含许多不应在域外的类中实例化的类。我的印象是默认的访问修饰符会帮助我。使我的域类的构造函数包可见。
在导入正确的package.class文件之后,任何类仍然可以使用构造函数。
如何防止这种情况发生?
答案 0 :(得分:3)
当你说'在导入正确的package.class文件后,任何类仍然可以使用构造函数'。我想你在谈论反思。 反射是一个强大的概念,允许任意实例化类,即使它们只提供私有构造函数。 没有办法阻止某人使用反射来实例化你的类。可以使用反射绕过类或构造函数修饰符(如private或protected)。
答案 1 :(得分:1)
如果你想从类外部控制一个类的实例化,你可以创建它的构造函数private
,如 -
class A{
private A(){
// do some thing
}
public static getInstance(){
}
}
现在,现在可以从类的外部创建A类的实例。但是如果外部世界真的需要一个类的实例,那么他们可以使用静态方法getInstance()
。这种结构可以防止外部世界使用new
关键字创建类的实例。
希望它会有所帮助。
感谢。