Skip to content

工具类规范:让公共代码有章可循

工具类是项目中最容易被滥用的地方。

一个 StringUtils 可能被改得面目全非——张三加了 isEmpty,李四加了 isNotEmpty,王五又加了个 isBlank,然后版本冲突了。

工具类的规范,是团队协作的基本功。

工具类的设计原则

必须 final 类

防止被继承:

java
// ✅ final 类,不能被继承
public final class StringUtils {

    private StringUtils() {
        throw new AssertionError("工具类禁止实例化");
    }

    // ...
}

私有构造方法

防止被 new 出来:

java
// ❌ 构造方法 public,可以被 new
public class BadUtils {
    public BadUtils() { }
}

// ✅ 私有构造方法,禁止实例化
public final class GoodUtils {
    private GoodUtils() {
        throw new AssertionError("工具类禁止实例化");
    }
}

全部静态方法

不需要实例化:

java
public final class StringUtils {

    private StringUtils() { }

    public static boolean isBlank(String str) {
        return str == null || str.trim().isEmpty();
    }

    public static boolean isNotBlank(String str) {
        return !isBlank(str);
    }

    public static String defaultIfBlank(String str, String defaultValue) {
        return isBlank(str) ? defaultValue : str;
    }
}

常用工具类示例

字符串工具

java
public final class StringUtils {

    private StringUtils() { }

    public static boolean isBlank(String str) {
        return str == null || str.trim().isEmpty();
    }

    public static boolean isNotBlank(String str) {
        return !isBlank(str);
    }

    public static String defaultIfBlank(String str, String defaultValue) {
        return isBlank(str) ? defaultValue : str;
    }

    public static String maskPhone(String phone) {
        if (isBlank(phone) || phone.length() < 7) return phone;
        return phone.substring(0, 3) + "****" + phone.substring(phone.length() - 4);
    }
}

集合工具

java
public final class CollectionUtils {

    private CollectionUtils() { }

    public static <T> boolean isEmpty(Collection<T&gt; collection) {
        return collection == null || collection.isEmpty();
    }

    public static <T> boolean isNotEmpty(Collection<T&gt; collection) {
        return !isEmpty(collection);
    }

    public static <T> List&lt;T&gt; emptyIfNull(List&lt;T&gt; list) {
        return list == null ? Collections.emptyList() : list;
    }
}

不要自己造轮子

很多工具类已经有成熟的库实现了,直接用:

场景推荐库
字符串处理Apache Commons Lang StringUtils
集合处理Spring CollectionUtils / Apache Commons
对象判断JDK Objects / Spring ObjectUtils
日期时间JDK 8 java.time
java
// ❌ 自己写
if (str != null && !str.isEmpty()) { }

// ✅ 用 Spring
if (StringUtils.hasLength(str)) { }

// ✅ 用 JDK Objects
Objects.requireNonNull(param, "参数不能为 null");

总结

  1. final 类:防止被继承
  2. 私有构造:防止被实例化
  3. 静态方法:不需要实例化
  4. 不要重复造轮子:优先用成熟库
  5. 无状态:不要在工具类里保存可变状态

工具类是项目的公共资产,规范要严格。

基于 VitePress 构建