最佳实战04:用私有Constructor使类不能被实例化

本文探讨了在Java中如何设计不可实例化的工具类,通过私有构造函数和抛出AssertionError防止类的实例化,确保类仅作为工具类使用,避免了不必要的资源消耗。

概述

有种类是不该被初始化的,这种类是有意义的,比如java.util.Math,java.util.Arrays,java.util.Collections。

使用范例

  • 想用抽象类使一个类不能被实例化的想法首先是无效的,因为其子类可以实例化;其次这会给开发者以误导,使开发者以为这个类就是希望被继承的;
  • throw new AssertionError();这句不是严格要求的,不过它能保证类不会从内部被实例化;
  • 一旦提供了私有Constructor,该类将不能被继承,因为子类的Constructor没有可访问的父类的构造函数,而这又是必须的;
package effective.java.item04;

import java.util.Collections;

// Noninstantiabiliy utility class
public class UtilityClass {

    // Suppress default constructor for noninstantiability
    private UtilityClass() {
        throw new AssertionError();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值