java构造方法可以是私有的吗_Java中的构造函数可以私有吗?

25c2257a0057458300c81719ff7a2830.png

茅侃侃

是的,构造函数可以是私有的。有不同的用途。一种这样的用法是用于单例设计反模式,我建议您不要使用它。另一个更合理的用法是委派构造函数。您可以让一个构造函数接受很多不同的选项,而这些选项实际上是实现细节,因此您将其设为私有,但是其余的构造函数将委托给它。作为委派构造函数的示例,以下类允许您保存值和类型,但仅允许您对类型的子集进行保存,因此需要将常规构造函数设为私有以确保仅使用允许的类型。通用私有构造函数有助于代码重用。public class MyClass {     private final String value;     private final String type;     public MyClass(int x){         this(Integer.toString(x), "int");     }     public MyClass(boolean x){         this(Boolean.toString(x), "boolean");     }     public String toString(){         return value;     }     public String getType(){         return type;     }     private MyClass(String value, String type){         this.value = value;         this.type = type;     }}编辑回顾几年后的答案,我想指出,这个答案既不完整,又有点极端。单例确实是一种反模式,应尽可能避免使用单例。但是,除了单例之外,私有构造函数还有许多用途,我的答案仅列举了一个。再举几个使用私有构造函数的情况:要创建一个无法实例化的类,它只是相关静态函数的集合(基本上是一个单例,但是如果它是无状态的,并且静态函数严格地对参数进行操作而不是对类状态进行操作,那么这种方法就不会像我这样不合理。尽管使用实现注入了依赖项的接口通常使实现需要大量依赖项或其他形式的上下文时,API维护起来更加容易,但是早期的自我似乎暗示了这一点。当有多个不同的方式来创建对象,一个私有的构造可能更容易理解其构建方式的不同(例如,这将更加有可读性,你new ArrayList(5)还是ArrayList.createWithCapacity(5),ArrayList.createWithContents(5),ArrayList.createWithInitialSize(5))。换句话说,私有构造函数允许您提供名称更易于理解的工厂函数,然后将构造函数私有化可确保人们仅使用更不言自明的名称。这也通常与构建器模式一起使用。例如:MyClass myVar = MyClass    .newBuilder()    .setOption1(option1)    .setOption2(option2)    .build();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值