带参数的Java私有构造函数[重复]

Posted

技术标签:

【中文标题】带参数的Java私有构造函数[重复]【英文标题】:Java private constructor with parameters [duplicate] 【发布时间】:2019-03-02 08:19:46 【问题描述】:

新手问题。在java中使用带参数的私有构造函数是否有意义?既然私有构造函数只能在类中访问,那么任何参数都必须是该类的实例变量吗?

【问题讨论】:

好的用例是singleton pattern 它对构建器模式也很有用。如果构建器是主类的嵌套子类,它可以访问私有构造函数并使用它来创建对象。 你忽略了一个类也可以有可以访问私有构造函数的静态方法。因此,实际值不限于实例变量。 【参考方案1】:

是的,如果您打算在类本身的某个方法中使用该构造函数并将该方法公开给其他类,就像我们在 singleton 模式中所做的那样。一个简单的例子如下:

public class MySingleTon     
    private static MySingleTon myObj;
    private String creator;
    private MySingleTon(String creator)
         this.creator = creator;
    
    public static MySingleTon getInstance(String creator)
        if(myObj == null)
            myObj = new MySingleTon(creator);
        
        return myObj;
    
    public static void main(String a[])
        MySingleTon st = MySingleTon.getInstance("DCR");
     

【讨论】:

如果我们有一个 MyUtility 而不是 mySingleTon 会怎么样,比如 java 的 Math 类。那样的话还有意义吗? 您的实际示例可以改进。您在getInstance("DCR") 中传递了一个参数,但如果您使用getInstance("RCD") 等新参数重新调用该方法,它将不会被重用。【参考方案2】:

假设您有多个 public 构造函数,它们具有相同的变量来分配给特定字段,或者您需要执行相同的处理,您不想在每个公共构造函数中重复该操作,但您想委托这个任务交给共同的private 构造函数。 因此,在private 构造函数中定义参数来实现这一点是有意义的。

例如:

public class Foo

   private int x;
   private int y;

   public Foo(int x, int y, StringBuilder name)
      this(x, y);
      // ... specific processing
    

   public Foo(int x, int y, String name)
      this(x, y);
      // ... specific processing
    

   private Foo(int x, int y)
      this.x = x;
      this.y = y;
    

【讨论】:

以上是关于带参数的Java私有构造函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

两个构造函数(带 & 不带参数),无输入 -> 无参数运行。跳过上述类中的构造函数

Java中私有构造函数有啥用?

Java:使用类型参数访问私有构造函数

eclipse中如何自动生成构造函数

Java练习 SDUT-2670_3-1 Point类的构造函数

Java中的构造函数可以是私有的吗?