静态工厂方法和构造方法

对于一个类,为了获得它的一个实例,最通常的方法就是提供一个公有的构造方法。实际上我们还可以使用公用的静态工厂方法。所谓静态工厂方法,实际上就是一个简单的静态方法,它返回的是类的一个实例。

例子:

public static Boolean valueOf(boolean b){

 return (b ? Boolean.true : Boolean.false);

}

这个是把boolean值转换为一个Boolean对象的引用。

用静态工厂方法来代替构造方法,既有好处,也有不足之处。下面我们就来看下静态工厂方法的优点:

  • 与构造函数相比,它具有名字。

  • 它每次被调用的时候,不要求创建一个新的对象。

  • 它可以返回原返回类型的子类型的对象,这样就增加了返回对象类型的灵活性。

静态工厂方法的缺点:

  • 如果一个类是通过静态工厂方法来取得实例的,并且该类的构造函数都不是公有的,那该类就不可能有子类(被继承),子类的构造函数需要首先调用父类的构造函数,因为父类的构造函数是private的,所以即使我们继承成功的话,那么子类也根本没有权限去调用父类的私有构造函数,所以是无法被继承的。

  • 静态工厂方法与其他的静态方法没有任何的区别,导致无法辨别那个静态方法是用来创建实例的。


总结

静态工厂方法和公有的构造方法都有它们各自的用途,我们需要理解各自的长处。适时的判断是使用静态工厂方法还是构造方法。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值