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

是的,一个构造函数可以是私有的。这有不同的用途。一个这样的用途是

singleton design anti-pattern,我建议反对你使用。另一个更合法的用法是委托构造函数;你可以有一个构造函数需要很多不同的选项,这是真正的实现细节,所以你使它是私有的,但然后你的剩余的构造函数委托给它。

作为委托构造函数的一个例子,下面的类允许你保存一个值和一个类型,但是它只允许你为一个子类型做它,所以使得通用构造函数私有是为了确保只使用允许的类型。公共私有构造函数有助于代码重用。

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,当实现需要更大数量的依赖或其他形式的上下文)。

>当有多种不同的方式来创建对象时,私有构造函数可以使得更容易理解构造它的不同方式(例如,对于新的ArrayList(5)或ArrayList.createWithCapacity(5),ArrayList .createWithContents(5),ArrayList.createWithInitialSize(5))。换句话说,私有构造函数允许你提供其名字更容易理解的工厂函数,然后使构造函数私有,确保人们只使用更不明显的名字。这也通常用于the builder pattern.例如:

MyClass myVar = MyClass

.newBuilder()

.setOption1(option1)

.setOption2(option2)

.build();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值