几个提升Java开发效率的小技巧
在日常Java开发中,合理运用一些语言特性或API,能让代码更简洁、健壮。这里分享几个亲测好用的小技巧。
1. 用Optional优雅避免空指针
空指针是Java程序员最头疼的问题之一。Java 8引入的Optional可以明确表达“值可能为空”的语义,避免显式null判断。
// 传统写法
public String getCity(User user) {
if (user != null) {
Address addr = user.getAddress();
if (addr != null) {
return addr.getCity();
}
}
return "Unknown";
}
// Optional写法
public String getCity(User user) {
return Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getCity)
.orElse("Unknown");
}
链式调用清晰明了,再也不用写多层if了。
2. Stream API让集合操作更流畅
处理集合数据时,Stream API能大幅简化代码。比如过滤、转换、统计等操作,一行搞定。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
// 筛选出长度大于3的名字,并转成大写
List<String> result = names.stream()
.filter(name -> name.length() > 3)
.map(String::toUpperCase)
.collect(Collectors.toList());
// 结果: [ALICE, CHARLIE, DAVID]
配合lambda,代码即文档,可读性极强。
3. try-with-resources自动关闭资源
手动关闭流、连接等资源容易遗漏,导致资源泄漏。try-with-resources语法能自动调用close(),让代码更安全。
// 传统方式:需要在finally中手动close
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("file.txt"));
// 读取操作
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close(); } catch (IOException ignored) {
}
}
}
// try-with-resources方式
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
// 读取操作
} catch (IOException e) {
e.printStackTrace();
}
// 资源自动关闭,简洁且不易出错
任何实现了AutoCloseable的类都可以这样使用。
4. 用LocalDate代替Date处理日期
旧版Date和Calendar设计混乱,线程不安全。Java 8的java.time包提供了清晰易用的日期时间API。
// 获取当前日期
LocalDate today = LocalDate.now();
// 计算100天后的日期
LocalDate future = today.plusDays(100);
// 日期比较
boolean isBefore = future.isAfter(today); // true
// 格式化
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String formatted = today.format(formatter);
不可变且线程安全,强烈推荐全面替换旧日期类。
这些小技巧如果能在项目中恰当使用,不仅能减少bug,还能提升代码的可维护性。你还知道哪些Java实用技巧?欢迎留言交流!