5个让代码更优雅的Java实用技巧
Java作为企业级开发的中流砥柱,其简洁性和可读性直接影响维护成本。以下是5个能提升代码质量的高频技巧,助你写出更健壮的代码。
1. 用Optional告别空指针
传统判空容易嵌套多层if,可读性差。Optional强制你处理“值可能缺失”的场景:
// 旧方式
public String getCity(User user) {
if (user != null) {
Address addr = user.getAddress();
if (addr != null) return addr.getCity();
}
return "Unknown";
}
// 新方式
public String getCity(User user) {
return Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getCity)
.orElse("Unknown");
}
链式调用清晰表达了“若存在则提取,否则返回默认值”。
2. Stream API让集合操作更流畅
处理集合数据时,Stream配合lambda表达式能大幅减少冗余循环:
List<String> names = users.stream()
.filter(u -> u.getAge() > 18)
.sorted(comparing(User::getName))
.map(User::getName)
.collect(toList());
一行完成过滤、排序、提取字段,比传统for循环更直观。
3. try-with-resources确保资源释放
操作文件或数据库时,手动关闭资源容易遗漏。try-with-resources语法(Java 7+)自动调用close():
try (Connection conn = dataSource.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
/* 处理结果 */ }
} catch (SQLException e) {
log.error("DB error", e);
}
任何实现AutoCloseable的类都可这样使用,代码更简洁安全。
4. 枚举实现单例模式
单例的传统实现(双重检查锁)容易出错,而枚举方式简洁且天生防止反射攻击:
public enum DataSourceSingleton {
INSTANCE;
private DataSource dataSource;
DataSourceSingleton() {
dataSource = new HikariDataSource(); // 初始化
}
public DataSource getDataSource() {
return dataSource; }
}
调用时用DataSourceSingleton.INSTANCE.getDataSource()即可。
5. 使用Objects工具类进行对象比较
比较两个对象是否相等时,需要同时处理null。Objects.equals()完美封装这一逻辑:
if (Objects.equals(obj1, obj2)) {
// 自动处理 null
// 相等时的操作
}
掌握这些技巧,你的Java代码将更加健壮、易读。不妨在下一个项目中实践起来!