其他工具包使用
除了Guava和Apache Commons,还有很多其他优秀的工具包。本文介绍Lombok、Hutool、Google Gson等常用工具包的使用方法。
📋 目录
🎯 一、Lombok
1.1 Maven依赖
xml
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<scope>provided</scope>
</dependency>1.2 常用注解
@Getter和@Setter:
java
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private String name;
private Integer age;
// 等价于:
// public String getName() { return name; }
// public void setName(String name) { this.name = name; }
// ... 其他getter和setter
}
// 在类级别指定访问级别
@Getter(AccessLevel.PROTECTED)
@Setter(AccessLevel.PRIVATE)
public class User2 {
private String name;
}
// 为单个字段指定
public class User3 {
@Getter
@Setter
private String name;
private Integer age; // 没有getter和setter
}@ToString:
java
import lombok.ToString;
@ToString
public class User {
private String name;
private Integer age;
// 自动生成toString方法
// User(name=张三, age=25)
}
// 排除字段
@ToString(exclude = {"password"})
public class User2 {
private String name;
private String password; // 不会出现在toString中
}
// 只包含指定字段
@ToString(of = {"name"})
public class User3 {
private String name;
private Integer age; // 不会出现在toString中
}@EqualsAndHashCode:
java
import lombok.EqualsAndHashCode;
@EqualsAndHashCode
public class User {
private String name;
private Integer age;
// 自动生成equals和hashCode方法
}
// 排除字段
@EqualsAndHashCode(exclude = {"id"})
public class User2 {
private Long id;
private String name;
}
// 只包含指定字段
@EqualsAndHashCode(of = {"name"})
public class User3 {
private String name;
private Integer age;
}@NoArgsConstructor、@AllArgsConstructor、@RequiredArgsConstructor:
java
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.RequiredArgsConstructor;
// 无参构造函数
@NoArgsConstructor
public class User {
private String name;
}
// 全参构造函数
@AllArgsConstructor
public class User2 {
private String name;
private Integer age;
}
// 必需字段构造函数(final字段或@NonNull字段)
@RequiredArgsConstructor
public class User3 {
private final String name;
@NonNull
private Integer age;
}@Data:
java
import lombok.Data;
@Data // 包含@Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor
public class User {
private String name;
private Integer age;
// 自动生成所有方法
}@Builder:
java
import lombok.Builder;
import lombok.ToString;
@Builder
@ToString
public class User {
private String name;
private Integer age;
private String email;
}
// 使用Builder模式
User user = User.builder()
.name("张三")
.age(25)
.email("zhangsan@example.com")
.build();
// 修改Builder(Java 8+)
@Builder(toBuilder = true)
public class User2 {
private String name;
}
User2 user2 = user.toBuilder().age(26).build();@Slf4j:
java
import lombok.extern.slf4j.Slf4j;
@Slf4j // 自动生成log字段
public class UserService {
public void doSomething() {
log.info("执行操作");
log.error("错误信息", exception);
log.debug("调试信息: {}", param);
}
// 等价于:
// private static final Logger log = LoggerFactory.getLogger(UserService.class);
}@SneakyThrows:
java
import lombok.SneakyThrows;
public class FileUtils {
@SneakyThrows // 自动抛出异常,无需try-catch
public String readFile(String fileName) {
return Files.readString(Path.of(fileName));
}
// 等价于抛出IOException
}🎯 二、Hutool
2.1 Maven依赖
xml
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.23</version>
</dependency>2.2 常用工具类
StrUtil(字符串工具):
java
import cn.hutool.core.util.StrUtil;
// 判断是否为空
boolean isEmpty = StrUtil.isEmpty(""); // true
boolean isBlank = StrUtil.isBlank(" "); // true
// 格式化字符串
String formatted = StrUtil.format("姓名:{},年龄:{}", "张三", 25);
// "姓名:张三,年龄:25"
// 字符串填充
String padded = StrUtil.padPre("123", 5, '0'); // "00123"
String padded2 = StrUtil.padAfter("123", 5, '0'); // "12300"
// 字符串截取
String sub = StrUtil.sub("hello world", 0, 5); // "hello"
// 字符串移除
String removed = StrUtil.removePrefix("hello.txt", "hello."); // "txt"
String removed2 = StrUtil.removeSuffix("hello.txt", ".txt"); // "hello"
// 字符串替换
String replaced = StrUtil.replace("hello world", "world", "java"); // "hello java"DateUtil(日期工具):
java
import cn.hutool.core.date.DateUtil;
// 格式化日期
String dateStr = DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss");
// 解析日期
Date date = DateUtil.parse("2024-01-01 12:30:45", "yyyy-MM-dd HH:mm:ss");
// 日期计算
Date tomorrow = DateUtil.offsetDay(new Date(), 1);
Date nextWeek = DateUtil.offsetWeek(new Date(), 1);
Date nextMonth = DateUtil.offsetMonth(new Date(), 1);
// 获取日期部分
Date beginOfDay = DateUtil.beginOfDay(new Date());
Date endOfDay = DateUtil.endOfDay(new Date());
Date beginOfWeek = DateUtil.beginOfWeek(new Date());
Date endOfWeek = DateUtil.endOfWeek(new Date());
Date beginOfMonth = DateUtil.beginOfMonth(new Date());
Date endOfMonth = DateUtil.endOfMonth(new Date());
// 日期比较
long between = DateUtil.betweenDay(new Date(), tomorrow, false);CollUtil(集合工具):
java
import cn.hutool.core.collection.CollUtil;
List<String> list = CollUtil.newArrayList("a", "b", "c");
// 判断是否为空
boolean isEmpty = CollUtil.isEmpty(list);
// 集合转换
List<String> upperCase = CollUtil.map(list, String::toUpperCase, true);
// 集合过滤
List<String> filtered = CollUtil.filter(list, s -> s.length() > 1);
// 集合分组
Map<Integer, List<String>> grouped = CollUtil.groupByField(list, String::length);
// 集合去重
List<String> unique = CollUtil.distinct(list);MapUtil(Map工具):
java
import cn.hutool.core.map.MapUtil;
Map<String, Integer> map = MapUtil.newHashMap();
// 判断是否为空
boolean isEmpty = MapUtil.isEmpty(map);
// 创建Map
Map<String, Integer> map2 = MapUtil.of("a", 1, "b", 2, "c", 3);
// 安全获取值
Integer value = MapUtil.getInt(map, "key", 0);
// Map转换
Map<String, String> converted = MapUtil.map(map, (k, v) -> k + "=" + v);FileUtil(文件工具):
java
import cn.hutool.core.io.FileUtil;
// 读取文件
String content = FileUtil.readUtf8String("file.txt");
List<String> lines = FileUtil.readUtf8Lines("file.txt");
// 写入文件
FileUtil.writeUtf8String("content", "output.txt");
FileUtil.appendUtf8String("append", "output.txt");
// 文件操作
FileUtil.copy("source.txt", "dest.txt", true);
FileUtil.move("old.txt", "new.txt", true);
boolean exists = FileUtil.exist("file.txt");
FileUtil.del("file.txt");JsonUtil(JSON工具):
java
import cn.hutool.json.JSONUtil;
User user = new User("张三", 25);
// 对象转JSON
String json = JSONUtil.toJsonStr(user);
// JSON转对象
User user2 = JSONUtil.toBean(json, User.class);
// JSON转List
String jsonArray = "[{\"name\":\"张三\"},{\"name\":\"李四\"}]";
List<User> users = JSONUtil.toList(jsonArray, User.class);
// JSON转Map
Map<String, Object> map = JSONUtil.toBean(json, Map.class);🎯 三、Google Gson
3.1 Maven依赖
xml
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>3.2 Gson使用
基本使用:
java
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
// 创建Gson实例
Gson gson = new Gson();
// 对象转JSON
User user = new User("张三", 25);
String json = gson.toJson(user);
// JSON转对象
User user2 = gson.fromJson(json, User.class);
// 格式化输出
Gson prettyGson = new GsonBuilder().setPrettyPrinting().create();
String prettyJson = prettyGson.toJson(user);
// 配置Gson
Gson customGson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd HH:mm:ss")
.serializeNulls() // 序列化null值
.disableHtmlEscaping() // 禁用HTML转义
.create();集合序列化:
java
// List序列化
List<String> list = Arrays.asList("a", "b", "c");
String json = gson.toJson(list);
// List反序列化
List<String> list2 = gson.fromJson(json, new TypeToken<List<String>>(){}.getType());
// Map序列化
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
String json2 = gson.toJson(map);
// Map反序列化
Map<String, Integer> map2 = gson.fromJson(
json2,
new TypeToken<Map<String, Integer>>(){}.getType()
);📖 学习资源
官方文档
✅ 学习检查清单
- [ ] 已掌握Lombok常用注解
- [ ] 已了解Hutool工具类的使用
- [ ] 已掌握Gson的JSON处理
- [ ] 已了解各工具包的适用场景
上一章节:Jackson使用指南
下一章节:IO操作常用写法
返回目录:代码规范