# erwin **Repository Path**: fbbzl/erwin ## Basic Information - **Project Name**: erwin - **Description**: a java util - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-17 - **Last Updated**: 2026-06-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: 工具库 ## README

Java 21 Version 1.2.15 License

erwin

轻量、顺手的 Java 工具库
聚焦异常断言、空安全访问、Lambda 适配、反射辅助与 Stream 分叉处理

English

--- ## 模块矩阵 ``` erwin ├── exception : 条件式异常断言、消息格式化与 i18n MessageSource 兜底 ├── lang : 空安全访问、变量校验、泛型类型解析 ├── lambda : checked exception Lambda 适配、LambdaMetafactory 辅助 └── stream : 单个 Stream 分叉为多路计算结果 ``` --- ## 一分钟接入 ```xml io.github.fbbzl erwin 1.2.15 ``` 要求 Java 21 及以上。 ```bash mvn test mvn package ``` --- ## 核心能力 ### 条件断言 `Throws` 提供条件式异常抛出,`Vars` 在其基础上提供更像参数校验的 require 风格 API。 ```java import org.fz.erwin.exception.Throws; import org.fz.erwin.lang.Vars; Vars.requireNotBlank(username); Vars.requireNotEmpty(userList); Throws.ifTrue(pageSize > 100, "page size must be <= {}", 100); Throws.ifEmpty(userList, "user list can not be empty"); ``` ### 空安全访问 `NullSafe` 用 Lambda 包住可能出现空指针的访问链,适合在简单取值场景里减少层层判空。 ```java import org.fz.erwin.lang.NullSafe; Integer length = NullSafe.nullDefault( () -> user.getProfile().getName().length(), 0 ); ``` ### Checked Exception Lambda 适配 `Try` 可以把带 checked exception 的函数适配为标准 JDK 函数式接口,并统一包装为运行时异常。 ```java import org.fz.erwin.lambda.Try; List contents = paths.stream() .map(Try.apply(Files::readString)) .toList(); ``` ### Lambda 元信息与反射辅助 `LambdaMetas` 基于 `LambdaMetafactory` 生成构造器、getter、setter 的函数式调用入口。 ```java import org.fz.erwin.lambda.LambdaMetas; Supplier constructor = LambdaMetas.lambdaConstructor(User.class); Function getter = LambdaMetas.lambdaGetter(User.class, String.class, "getName"); BiConsumer setter = LambdaMetas.lambdaSetter(User.class, String.class, "setName"); ``` ### Stream 分叉计算 `StreamForks` 让同一份数据源被多路 Stream 消费,用一个入口收集不同统计结果。 ```java import org.fz.erwin.stream.StreamForks; StreamForks.ForkResult result = StreamForks.of(List.of(1, 2, 3, 4)) .fork("sum", stream -> stream.mapToInt(Integer::intValue).sum()) .fork("even", stream -> stream.filter(i -> i % 2 == 0).toList()) .done(); Integer sum = result.get("sum"); List even = result.get("even"); ``` --- ## 工具栈 | 技术 | 版本 | |------|------| | Java | 21 | | Lombok | 1.18.46 | | Hutool | 5.8.44 | | Apache Commons Lang | 3.20.0 | | Apache Commons Collections | 4.5.0 | | Apache Commons IO | 2.22.0 | | Apache Commons Codec | 1.22.0 | | Apache Commons Text | 1.15.0 | | Guava | 33.6.0-jre | | Failsafe | 3.3.2 | | Spring Context | 6.2.7 provided | --- ## License [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0)

Made with love by fengbinbin