Java 代码精简

Java 代码精简

利用语法

利用三元表达式

普通

String title;
if (isMember(phone)) { title = "会员"; } else { title = "游客"; } 

精简

String title = isMember(phone) ? "会员" : "游客"; 

注意:对于包装类型的算术计算,需要注意避免拆包时的空指针问题。

利用 for-each 语句

从 Java 5 起,提供了 for-each 循环,简化了数组和集合的循环遍历。for-each 循环允许你无需保持传统 for 循环中的索引就可以遍历数组,或在使用迭代器时无需在 while 循环中调用 hasNext 方法和 next 方法就可以遍历集合。

普通

double[] values = ...; for(int i = 0; i < values.length; i++) { double value = values[i]; // TODO: 处理value } List<Double> valueList = ...; Iterator<Double> iterator = valueList.iterator(); while (iterator.hasNext()) { Double value = iterator.next(); // TODO: 处理value } 

精简

double[] values = ...; for(double value : values) { // TODO: 处理value } List<Double> valueList = ...; for(Double value : valueList) { // TODO: 处理value } 

利用 try-with-resource 语句

所有实现 Closeable 接口的“资源”,均可采用 try-with-resource 进行简化。

普通

BufferedReader reader = null; try { reader = new BufferedReader(new FileReader("cities.csv")); String line; while ((line = reader.readLine()) != null) { // TODO: 处理line } } catch (IOException e) { log.error("读取文件异常", e); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { log.error("关闭文件异常", e); } } } 

精简

try (BufferedReader reader = new BufferedReader(new FileReader("test.txt"))) { String line; while ((line = reader.readLine()) != null) { // TODO: 处理line } } catch (IOException e) { log.error("读取文件异常", e); } 

利用 return 关键字

利用 return 关键字,可以提前函数返回,避免定义中间变量。

普通

public static boolean hasSuper(@NonNull List<UserDO> userList) { boolean hasSuper = false; for (UserDO user : userList) { if (Boolean.TRUE.equals(user.getIsSuper())) { hasSuper = true; break; } } return hasSuper; } 

精简

public static boolean hasSuper(@NonNull List<UserDO> userList) { for (UserDO user : userList) { if (Boolean.TRUE.equals(user.getIsSuper())) { return true; } } return false; } 

利用 static 关键字

利用 static 关键字,可以把字段变成静态字段,也可以把函数变为静态函数,调用时就无需初始化类对象。

普通

public final class GisHelper { public double distance(double lng1, double lat1, double lng2, double lat2) { // 方法实现代码 } } GisHelper gisHelper = new GisHelper(); double distance = gisHelper.distance(116.178692D, 39.967115D, 116.410778D, 39.899721D); 

精简

public final class GisHelper { public static double distance(double lng1, double lat1, double lng2, double lat2) { // 方法实现代码 } } double distance = GisHelper.distance(116.178692D, 39.967115D, 116.410778D, 39.899721D); 

利用 lambda 表达式

Java 8 发布以后,lambda 表达式大量替代匿名内部类的使用,在简化了代码的同时,更突出了原有匿名内部类中真正有用的那部分代码。

普通

new Thread(new Runnable() { public void run() { // 线程处理代码 } }).start(); 

精简

new Thread(() -> { // 线程处理代码 }).start(); 

利用方法引用

方法引用(::),可以简化 lambda 表达式,省略变量声明和函数调用。

普通

Arrays.sort(nameArray, (a, b) -> a.compareToIgnoreCase(b)); List<Long> userIdList = userList.stream() .map(user -> user.getId()) .collect(Collectors.toList()); 

精简

Arrays.sort(nameArray, String::compareToIgnoreCase); List<Long> userIdList = userList.stream() .map(UserDO::getId) .collect(Collectors.toList()); 

利用静态导入

静态导入(import static),当程序中大量使用同一静态常量和函数时,可以简化静态常量和函数的引用。

普通

List<Double> areaList = radiusList.stream().map(r -> Math.PI * Math.pow(r, 2)).collect(Collectors.toList()); 

精简

import static java.lang.Math.PI; import static java.lang.Math.pow; import static java.util.stream.Collectors.toList; List<Double> areaList = radiusList.stream().map(r -> PI * pow(r, 2)).collect(toList()); 
  • 注意:静态引入容易造成代码阅读困难,所以在实际项目中应该警慎使用。

利用 unchecked 异常

Java 的异常分为两类:Checked 异常和 Unchecked 异常。Unchecked 异常继承了RuntimeException ,特点是代码不需要处理它们也能通过编译,所以它们称作 Unchecked 异常。利用 Unchecked 异常,可以避免不必要的 try-catch 和 throws 异常处理。

普通

@Service
public class UserService { public void createUser(UserCreateVO create, OpUserVO user) throws BusinessException { checkOperatorUser(user); ... } private void checkOperatorUser(OpUserVO user) throws BusinessException { if (!hasPermission(user)) { throw new BusinessException("用户无操作权限"); } ... } ... } @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @PostMapping("/createUser") public Result<Void> createUser(@RequestBody @Valid UserCreateVO create, OpUserVO user) throws BusinessException { userService.createUser(create, user); return Result.success(); } ... } 

精简

@Service
public class UserService { public void createUser(UserCreateVO create, OpUserVO user) { checkOperatorUser(user); ... } private void checkOperatorUser(OpUserVO user) { if (!hasPermission(user)) { throw new BusinessRuntimeException("用户无操作权限"); } ... } ... } @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @PostMapping("/createUser") public Result<Void> createUser(@RequestBody @Valid UserCreateVO create, OpUserVO user) { userService.createUser(create, user); return Result.success(); } ... } 

利用注解

利用 Lombok 注解

Lombok 提供了一组有用的注解,可以用来消除Java类中的大量样板代码。

普通

public class UserVO {
    private Long id; private String name; public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } ... } 

精简

@Getter
@Setter
@ToString
public class UserVO { private Long id; private String name; ... } </
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值