避免在Java中创建对象

时间:2014-07-19 09:42:01

标签: java

如何使用java中的new运算符阻止其他类创建类的对象。例如,我有一个A类。我不希望任何其他类使用new运算符创建它的对象。

一种方法是我可以在A类的构造函数中抛出IllegalArgumentException。

还有其他吗?

 public class A{

      public A(){
        throw IllegalArguementException();
      }
 }

5 个答案:

答案 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() {}

将构造函数设为私有。

相关问题