避免在Java中创建对象
如何在java中使用new操作符停止其他类来创建类的对象。例如,我有一个类A。我不希望任何其他类使用new运算符创建其对象 一种方法是我可以在类A的构造函数中抛出IllegalArgumentException 还有别的吗避免在Java中创建对象,java,Java,如何在java中使用new操作符停止其他类来创建类的对象。例如,我有一个类A。我不希望任何其他类使用new运算符创建其对象 一种方法是我可以在类A的构造函数中抛出IllegalArgumentException 还有别的吗 public class A{ public A(){ throw IllegalArguementException(); } } 将构造函数设为私有。您可以将类设为抽象类(尽管在本例中,任何类都不能实例化此类的实例,因此可能
public class A{
public A(){
throw IllegalArguementException();
}
}
将构造函数设为私有。您可以将类设为抽象类(尽管在本例中,任何类都不能实例化此类的实例,因此可能这不是您想要的),或者将构造函数设为私有类。您所采用的方法是错误的。。使用这种方法也不能创建类的对象。
因此,必须将构造私有化,并编写静态方法来获取类的实例
class Test
{
private Test(){ }
public static Test getTestInstance(){
return new Test();
}
}
希望有帮助,您可以通过使构造函数
私有化来实现
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 */
}
}
在Java5或更高版本中使用Enum实现Singleton是线程安全的,通过Enum实现Singleton可以确保您的Singleton即使在多线程环境中也只有一个实例
public enum SingletonEnum {
INSTANCE;
public void doYourStuff(){
System.out.println("Singleton using Enum");
}
}
这可以从客户端调用:
public static void main(String[] args) {
SingletonEnum.INSTANCE.doYourStuff();
}
有很多答案
public static void main(String[] args) {
SingletonEnum.INSTANCE.doYourStuff();
}