java工具类必须纯静态且不可实例化,所有方法为static,构造器私有并抛异常;接口静态方法非工厂方法,创建逻辑应分离;命名需具象单一,禁用可变静态字段。

工具类必须是纯静态、不可实例化
Java工具类本质是功能容器,不是对象载体。所有方法必须声明为static,构造方法必须私有且抛出运行时异常,明确阻断实例化路径。常见错误是留空公有构造器或只写super(),这会让IDE误判可继承,也违背“无状态”设计初衷。正确写法示例:
private StringUtils() { throw new UnsupportedOperationException("no instance for utility class"); }- 禁止出现
this、实例字段、非静态内部类等任何与对象生命周期挂钩的成分
接口静态方法 ≠ 工厂方法,职责要分清
Java 8+允许接口定义public static方法,但它只承担规范内配套工具逻辑(如格式化、校验、默认值生成),不负责创建实现类对象。真正做对象创建的,应是独立的静态工厂类,返回接口类型实例。
- 接口中写
public static PaymentProcessor create(...)❌——语义错位,破坏接口抽象性 - 应另建
PaymentFactory类,提供public static PaymentProcessor create(String type)✅——解耦创建逻辑与契约定义
命名精准、职责单一、避免泛化
工具类名就是它的能力标签。用StringUtils、DateUtils、JsonUtils这类具象名称,拒绝CommonUtils、BaseTools等模糊命名。每个方法只干一件事:比如isBlank()专注判空,trimToNull()专注截空,不合并逻辑。
- 方法命名动词开头、语义直白:
parseJson()、toLocalDateTime()、isValidEmail() - 一个类超过15个方法,大概率已违反单一职责,应按领域拆分
静态变量仅限常量,禁用可变共享状态
工具类中允许public static final常量(如DEFAULT_CHARSET = StandardCharsets.UTF_8),但严禁任何形式的可变静态字段——包括计数器、缓存Map、线程局部变量引用等。
- 反例:
private static int retryCount = 0;——多线程下数据错乱,且让工具类产生副作用 - 若需缓存,应使用
java.util.concurrent.ConcurrentMap配合局部作用域管理,或交由Spring等容器托管
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











