如何使用java中的new运算符阻止其他类创建类的对象。例如,我有一个A类。我不希望任何其他类使用new运算符创建它的对象。
一种方法是我可以在A类的构造函数中抛出IllegalArgumentException。
还有其他吗?
public class A{
public A(){
throw IllegalArguementException();
}
}
答案 0 :(得分:5)
你所遵循的方法是错误的......你也不能用这种方法创造你班级的对象。
因此,您必须将构造设为私有,并编写静态方法以获取类的实例。
class Test
{
private Test(){ }
public static Test getTestInstance(){
return new Test();
}
}
希望它有所帮助,
答案 1 :(得分:4)
您可以通过制作构造函数private
来完成。
class A
{
int i;
private A()
{
i=1;
}
public static A getInstance()
{
return new A();
}
}
class B
{
A a;
public B()
{
/* a=new A(); //This doesn't compile */
}
}
答案 2 :(得分:4)
使用Enum在Java 5或更高版本中实现Singleton是线程安全的,通过Enum实现Singleton可确保您的单例即使在多线程环境中也只有一个实例。
public enum SingletonEnum {
INSTANCE;
public void doYourStuff(){
System.out.println("Singleton using Enum");
}
}
这可以从客户端调用:
public static void main(String[] args) {
SingletonEnum.INSTANCE.doYourStuff();
}
答案 3 :(得分:2)
你可以使类抽象(虽然在这种情况下,任何类都不能实例化这个类的实例,所以也许它不是你想要的),或者使构造函数变为私有。
答案 4 :(得分:1)
private A() {}
将构造函数设为私有。