Skip to content

其他工具包使用 ​

除了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操作常用写法
返回目录:代码规范