简介

有时我们需要创建一些工具类,这些类只包含静态方法和静态字段,不应该被实例化。

那么把类写成抽象的不就可以无法实例化了?抽象类虽然不能被实例化,但可以被继承。而工具类通常不需要子类化,私有构造器+异常的方式更加明确和严格。

在 Java 中,子类的构造器必须调用父类的构造器(显式或隐式调用 super(...))。如果父类的构造器是私有的(private),子类将无法访问父类的构造器,从而导致子类无法被实例化。可进一步将类声明为 final,防止子类化。

实现

举个例子 🌰

public final class StringUtils {
    // 私有构造器,禁止外部实例化
    private StringUtils() {
        // 防止通过反射创建实例
        throw new AssertionError("不可实例化!");
    }

    // 静态工具方法示例
    public static boolean isEmpty(String str) {
        return str == null || str.trim().isEmpty();
    }

    public static String reverse(String str) {
        if (str == null) return null;
        return new StringBuilder(str).reverse().toString();
    }
}

总结

通过这种方式,清楚地表明这个类不应该被实例化,避免其他开发者错误地创建实例。


我爱吃炒煤
1 声望0 粉丝