博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
idea 将代码块抽取为方法 快捷键
阅读量:3707 次
发布时间:2019-05-21

本文共 8746 字,大约阅读时间需要 29 分钟。

前言

遇到业务逻辑很复杂的模块,有时候一个方法一写就好几百行。这个时候很多代码可以抽成一个方法,从而使业务逻辑很复杂的方法变得易读。当然,你必须要在关键的地方写上注释,方便后面的人维护。

Idea提供了一个抽取功能,可以将变量、代码块等抽取出来,减少重复代码,提高代码可读性。
用来重构代码,非常方便快捷。开发效率也会提高!!

具体操作

抽取方法的快捷键是 Ctrl + Alt + M,其中 M 代表 Method,即方法。

以下代码分别演示了抽取前,抽取后的变化,可以看出抽取后的代码结构更清晰简单,阅读性更好。

提取前:

// 大转盘 设置某用户下次必中某商品public void updateTurntableNextAward(Integer userId, Integer awardId, HttpServletRequest request) {
//验证奖品 BsTurntableAward award = turntableAwardMapper.selectByPrimaryKey(awardId); if (award == null) {
throw new BusiException(E.INVALID_PARAMETER, "奖品不存在"); } if (award.getState() != 1) {
throw new BusiException(E.INVALID_PARAMETER, "奖品已停售"); } Jedis jedis = RedisPool.getJedis(); SysUser sysUser = (SysUser) request.getSession().getAttribute(R.LOGIN_USER); try {
if (jedis.hexists(Rkey.USER_INFO, userId.toString())) {
String hget = jedis.hget(Rkey.TURNTALE_NEXT_AWARD, userId.toString()); if (StringUtils.isEmpty(hget)) {
//第一次设置 BsTurntableNextAward record = new BsTurntableNextAward(); record.setAwardId(awardId); record.setState(0); record.setUserId(userId); record.setSysUser(sysUser.getUserName()); turntableNextAwardMapper.insert(record); //修改必中商品的已抽取库存总量:extractAmount + 1 turntableAwardMapper.updateExtractAmountAddOneByAwardId(awardId); //新增操作,redis 对应商品总投放量加一 jedis.hincrBy(Rkey.BRANCH_AWARD_ACTIVE_STOCK, awardId.toString(), 1); //操作数据库 商品对应投放库存加一 //下面这部分可以抽取为1个方法,选中这部分,按下快捷键 Ctrl + Alt + M,填写方法名称即可抽取 Date now = new Date(); String formatDate = DateUtil.formatDate(now, "yyyy-MM-dd HH:mm"); BsTurntableActivity nowPeriodActivity = turntableActivityMapper.queryNowPeriodActivity(formatDate); String curActivityId = nowPeriodActivity.getId().toString(); BsTurntableActivity turntableActivity = new BsTurntableActivity(); turntableActivity.setId(curActivityId; if (nowPeriodActivity.getAwardId1().equals(awardId)) {
turntableActivity.setAmount1(nowPeriodActivity.getAmount1() + 1); } else if (nowPeriodActivity.getAwardId2().equals(awardId)) {
turntableActivity.setAmount2(nowPeriodActivity.getAmount2() + 1); } else if (nowPeriodActivity.getAwardId3().equals(awardId)) {
turntableActivity.setAmount3(nowPeriodActivity.getAmount3() + 1); } else if (nowPeriodActivity.getAwardId4().equals(awardId)) {
turntableActivity.setAmount4(nowPeriodActivity.getAmount4() + 1); } else if (nowPeriodActivity.getAwardId5().equals(awardId)) {
turntableActivity.setAmount5(nowPeriodActivity.getAmount5() + 1); } else if (nowPeriodActivity.getAwardId6().equals(awardId)) {
turntableActivity.setAmount6(nowPeriodActivity.getAmount6() + 1); } } else {
//替换操作 Integer oldAwardId = Integer.valueOf(hget); // 查询用户是否有 没有抽取的必中记录 BsTurntableNextAward record = turntableNextAwardMapper.queryDataByUserAndState(userId, 0); if (record != null) {
record.setAwardId(awardId); record.setSysUser(sysUser.getUserName()); turntableNextAwardMapper.updateByPrimaryKeySelective(record); //修改之前设置的必中商品已抽取库存总量:extractAmount - 1 turntableAwardMapper.updateExtractAmountReduceOneByAwardId(oldAwardId); //修改必中商品的已抽取库存总量:extractAmount + 1 turntableAwardMapper.updateExtractAmountAddOneByAwardId(awardId); } //更新替换操作,原有商品总投放量减一 jedis.hincrBy(Rkey.BRANCH_AWARD_ACTIVE_STOCK, oldAwardId.toString(), -1); //更新替换操作,替换商品总投放量加一 jedis.hincrBy(Rkey.BRANCH_AWARD_ACTIVE_STOCK, awardId.toString(), 1); } jedis.hset(Rkey.TURNTALE_NEXT_AWARD, userId.toString(), awardId.toString()); //数据库 } else {
throw new BusiException(E.CUSTOM_ERROR_MSG, "用户不存在"); } } finally {
RedisPool.returnJedis(jedis); }}

抽取之后,代码如下:

public void updateTurntableNextAward(Integer userId, Integer awardId, HttpServletRequest request) {
//验证奖品 BsTurntableAward award = turntableAwardMapper.selectByPrimaryKey(awardId); if (award == null) {
throw new BusiException(E.INVALID_PARAMETER, "奖品不存在"); } if (award.getState() != 1) {
throw new BusiException(E.INVALID_PARAMETER, "奖品已停售"); } Jedis jedis = RedisPool.getJedis(); SysUser sysUser = (SysUser) request.getSession().getAttribute(R.LOGIN_USER); try {
if (jedis.hexists(Rkey.USER_INFO, userId.toString())) {
String hget = jedis.hget(Rkey.TURNTALE_NEXT_AWARD, userId.toString()); if (StringUtils.isEmpty(hget)) {
//第一次设置 BsTurntableNextAward record = new BsTurntableNextAward(); record.setAwardId(awardId); record.setState(0); record.setUserId(userId); record.setSysUser(sysUser.getUserName()); turntableNextAwardMapper.insert(record); //修改必中商品的已抽取库存总量:extractAmount + 1 turntableAwardMapper.updateExtractAmountAddOneByAwardId(awardId); //新增操作,redis 对应商品总投放量加一 jedis.hincrBy(Rkey.BRANCH_AWARD_ACTIVE_STOCK, awardId.toString(), 1); //操作数据库 商品对应投放库存加一 //下面这部分可以抽取为1个方法,选中这部分,按下快捷键 Ctrl + Alt + M,填写方法名称即可抽取 updateAmountAddOneWhenSettingBizhong(awardId); } else {
//替换操作 Integer oldAwardId = Integer.valueOf(hget); // 查询用户是否有 没有抽取的必中记录 BsTurntableNextAward record = turntableNextAwardMapper.queryDataByUserAndState(userId, 0); if (record != null) {
record.setAwardId(awardId); record.setSysUser(sysUser.getUserName()); turntableNextAwardMapper.updateByPrimaryKeySelective(record); //修改之前设置的必中商品已抽取库存总量:extractAmount - 1 turntableAwardMapper.updateExtractAmountReduceOneByAwardId(oldAwardId); //修改必中商品的已抽取库存总量:extractAmount + 1 turntableAwardMapper.updateExtractAmountAddOneByAwardId(awardId); } //更新替换操作,原有商品总投放量减一 jedis.hincrBy(Rkey.BRANCH_AWARD_ACTIVE_STOCK, oldAwardId.toString(), -1); //更新替换操作,替换商品总投放量加一 jedis.hincrBy(Rkey.BRANCH_AWARD_ACTIVE_STOCK, awardId.toString(), 1); } jedis.hset(Rkey.TURNTALE_NEXT_AWARD, userId.toString(), awardId.toString()); //数据库 } else {
throw new BusiException(E.CUSTOM_ERROR_MSG, "用户不存在"); } } finally {
RedisPool.returnJedis(jedis); }}// 操作数据库 设置必中 对应商品库存加一private void updateAmountAddOneWhenSettingBizhong(Integer awardId) {
Date now = new Date(); String formatDate = DateUtil.formatDate(now, "yyyy-MM-dd HH:mm"); BsTurntableActivity nowPeriodActivity = turntableActivityMapper.queryNowPeriodActivity(formatDate); String curActivityId = nowPeriodActivity.getId().toString(); BsTurntableActivity turntableActivity = new BsTurntableActivity(); turntableActivity.setId(curActivityId); if (nowPeriodActivity.getAwardId1().equals(awardId)) {
turntableActivity.setAmount1(nowPeriodActivity.getAmount1() + 1); } else if (nowPeriodActivity.getAwardId2().equals(awardId)) {
turntableActivity.setAmount2(nowPeriodActivity.getAmount2() + 1); } else if (nowPeriodActivity.getAwardId3().equals(awardId)) {
turntableActivity.setAmount3(nowPeriodActivity.getAmount3() + 1); } else if (nowPeriodActivity.getAwardId4().equals(awardId)) {
turntableActivity.setAmount4(nowPeriodActivity.getAmount4() + 1); } else if (nowPeriodActivity.getAwardId5().equals(awardId)) {
turntableActivity.setAmount5(nowPeriodActivity.getAmount5() + 1); } else if (nowPeriodActivity.getAwardId6().equals(awardId)) {
turntableActivity.setAmount6(nowPeriodActivity.getAmount6() + 1); } turntableActivityMapper.updateByPrimaryKeySelective(turntableActivity);}

ps:

1.选中要提取的部分,按下快捷键 Ctrl + Alt + M,填写方法名称即可抽取
2.有可能提取的时候,提取的参数不够(不满足我们的期望),可以等提取结束后手动修改,加入需要的参数。

转载地址:http://lczjn.baihongyu.com/

你可能感兴趣的文章
新装Ubuntu18.04系统配置PX4环境
查看>>
QGC注释消息提示框
查看>>
Qt编译PX4源码,参考如下进行配置
查看>>
写论文查论文查参考文献
查看>>
S3C2440—5.UART的使用
查看>>
S3C2440—6.串口的printf实现
查看>>
S3C2440—7.存储控制器访问外设
查看>>
S3C2440—8.读写SDRAM
查看>>
Python解析JSON
查看>>
S3C2440—9.复制程序到SDRAM中执行
查看>>
S3C2440—10.代码重定位
查看>>
OSI网络参考模型学习
查看>>
Proteus仿真—51单片机实现AC信号测频、显示、双机通信
查看>>
为什么8位数据范围是-128到127,而不是-127到128?
查看>>
ARM—异常中断处理
查看>>
STM32—驱动GY85-IMU模块
查看>>
LeetCode_2_两数相加
查看>>
LeetCode_1_两数之和
查看>>
C语言—memset()函数的使用
查看>>
LeetCode_3_无重复字符的最长子串
查看>>