Effective Java学习-通过私有构造器强化不可实例的能力

本文介绍了如何通过在Java中设置私有构造器来防止类被意外实例化,适用于工具类和包含静态方法的类,以强化不可实化的能力。通过在私有构造器中抛出AssertionError确保代码在不符合预期情况下立即失败。
摘要由CSDN通过智能技术生成

简介

本文是对《Effective Java第2章第4条的内容进行介绍和解读。条建议通过私有构造器来强化不可实化的能力,以防止类被意外地实例。这种技术通常被用在工具类或者包含静态方法和静态字段的类上。

什么需要强化不可实例化的能力?

在中,我们可以通过使用public的构造方法来创建的实例。但有时候,我们希望某个类被实例化,比如工具类,只想通过调它的静态方法来使用它的功能。Java语言本并没有提供直接的方法来防止类的实例,因此我们需要使用一些技巧来实现这一标。

通过私有构造器实现不可实化

在Java中,我们可以通过将构造器私有来强化不可实例化的能力。私有构器不能被外部类访问,因此无法通过``操作符来创建实例。当一个类只包含私构造器时,它将无法被实例化。

public class UtilityClass {
    // 私有构造器
    UtilityClass() {
        throw new AssertionError(); // 防止意外地类外调用私有构造器
    }

    // 其静态方法和静态字段
    // ...
}

在述示例代码中,UtilityClass类中只包含私有构造器,通过抛出一个AssertionError来止从类外调用私有构造器。由于这造器是私有的,外部无法访问,因无法通过new操作符来创建实例。

什么要抛出AssertionError

你可能会好奇什么在私有构造器中抛出AssertionError毕竟,AssertionError通常是用来检查不条件的,而不是用来防止实例化的。是因为Java设计者认为,在实际运行时,内部的不变条件应该总是成立的。如果错误地从类外调用私有构造器导致类内部实例化,那么这是一个编程错误,通过抛出AssertionError来使代码立即失败。

下面以一个实际的例子来说明如何通过有构造器实现不可实例化的能力。

public class StringUtil {
    // 私有构造器
    StringUtil() {
        throw new AssertionError();
    }

    // 静态方法 判断字符串是否为空
    public static boolean isEmpty(String str) {
        str == null || str.trim().isEmpty();
    }
}

在述示例代码中,StringUtil类是一个工具类通过调用静态方法isEmpty可以判断一个字符串是否为空由于工具类通常不需要被实例化,所它的构造器被私有化。当有人错误地试以new StringUtil()的方式实例化该类时,会抛出AssertionError

结论

通过私有造器来强化不可实例化的能力是一个单而有效的技巧。它可以确保类不会被外地实例化,并且可以清晰地表达类的途和适用范围。这种技巧常用于工类和包含静态方法的类。通过在私有构器中抛出AssertionError,可以使代码在不符预期的情况下立即失败,帮助开发人及时发现问题。

希望本文能够帮助你解并应用《Effective Java》第2章第4条的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值