在IntelliJ下如何做parameterize method的重构

IDEA - 【抽取方法参数】快速抽取(方法,变量,字段,常量,参数等),重构,优化代码 文章目录IDEA - 【抽取方法参数】快速抽取(方法,变量,字段,常量,参数等),重构,优化代码1、抽取方法参数2、示例 IDEA - 【抽取方法参数】快速抽取(方法,变量,字段,常量,参数等),重构,优化代码 1、抽取方法参数 代码如下 选中字段,然后右键 或者通过菜单栏 通过抽取参数,可以向方法体重快速添加参数 2、示例 /** * @author Created by 谭健 on 2021/1/22. 星期五. 16:40. * © All Rights Reserved. */ pub 阅读详情

今天在做项目的时候,发现在测试代码中有一个bad smell。准备测试数据的代码在结构上是类似的,可以用parameterize method的方法进行重构。

为了说明,我就构造了一些简单的示例,示例很简单,只是为了演示重构步骤。


下面的代码都是new了一个person再setName(红色部分代码)。这个步骤是相似的,完全可以抽方法来准备具有名字的person。

    @Test
    public void should_new_person_with_good_name() {
        Person person = new Person();
        person.setName("kiwi");

        assertThat(person.getName(), is(equalTo("kiwi")));
    }

    @Test
    public void should_new_person_with_bad_name() {
        Person person = new Person();
        person.setName("sb");

        assertThat(person.getName(), is(equalTo("sb")));
    }


方法一:抽方法+提取方法参数(不推荐)

1.先抽方法(command + alt + M):

    private Person getPerson() {
        Person person = new Person();
        person.setName("kiwi");
        return person;
    }

2.提参数(command + alt + P):

    private Person getPerson(String name) {
        Person person = new Person();
        person.setName(name);
        return person;
    }

然后这样做了以后,代码就变成这B样了,intellij并没有发现这个具有相似结构的代码(红色部分并没有改变):

    @Test
    public void should_new_person_with_good_name() {
        Person person = getPerson("kiwi");
        assertThat(person.getName(), is(equalTo("kiwi")));
    }

    private Person getPerson(String name) {
        Person person = new Person();
        person.setName(name);
        return person;
    }

    @Test
    public void should_new_person_with_bad_name() {
        Person person = new Person();
        person.setName("sb");

        assertThat(person.getName(), is(equalTo("sb")));
    }

你需要去手动的找每一个可以用getPerson(String name)的地方,然后再替换,可以想象的是,如果可以替换的地方很多,你就悲催了。

我们希望尽可能的让ide完成这些工作。所以,我推荐使用第二种方法。


方法二:提取局部变量+抽方法

1.提取局部变量(command + alt + V)

    @Test
    public void should_new_person_with_good_name() {
        String name = "kiwi";
        Person person = new Person();
        person.setName(name);

        assertThat(person.getName(), is(equalTo("kiwi")));
    }

首先提取变量,将变量移到欲提取的方法体的外部。

2.提取方法(command + alt + M)

这个时候intellij会提示你有重复的代码,选择全部替换,就OK了

    @Test
    public void should_new_person_with_good_name() {
        String name = "kiwi";
        Person person = getPerson(name);
        assertThat(person.getName(), is(equalTo("kiwi")));
    }


    private Person getPerson(String name) {
        Person person = new Person();
        person.setName(name);
        return person;
    }


    @Test
    public void should_new_person_with_bad_name() {
        Person person = getPerson("sb");
        assertThat(person.getName(), is(equalTo("sb")));
    }

3.Inline局部变量(optional)

这个时候可以把原来的局部变量inline回去了,如果需要的话。


我使用的intellij是12的community版,使用这样的方法,你就不用再一点点的去找可能重复的地方了。有时候intellij也不是那么的intelligent。

IntelliJ IDEA 中的 Java 代码重构技巧 本文旨在全面介绍IntelliJ IDEA中Java代码重构的各种技巧和方法。我们将覆盖从基础到高级的重构操作,帮助开发者充分利用IDE的强大功能来改善代码结构,同时保持功能不变。文章首先介绍重构的基本概念,然后详细讲解IntelliJ IDEA中的各种重构操作,接着通过实际案例展示重构过程,最后讨论重构的最佳实践和常见问题。重构(Refactoring):在不改变代码外在行为的前提下,对代码内部结构进行修改,以提高代码质量的过程。安全重构(Safe Refactoring) 阅读详情

相关推荐

Docker 安装 CentOS7

本文主要介绍了docker 下安装centos7。访问 CentOS 镜像库地址:https://hub.docker.com/_/centos?tab=tags&page=1。可以通过 Sort by 查看其他版本的 CentOS 。默认是最新版本 centos:latest 。 使用以下命令来查看是否已安装了 centos7: 启动centos容器,并把docker上centos的22端口映射到本机60001端口(端口号可以自己指定) 3、进入到Centos容器 4.安装ssh服务和网络必须软件

折腾java的博客 1万+

【IDEA】代码重构小技巧(VIP典藏版)

提取想要的代码,按快捷键Ctrl+Alt+M,就会弹出框,写出方法名称即可提取一个方法。Ctrl+Shift+Alt+T,或者Shift+F6。反向操作,选中方法后,把方法代码直接并入主方法里面。

慕白Lee的博客 7000

LM Studio 模型加载与转换实战指南:从GGUF格式到本地部署

本文提供了使用LM Studio加载与转换GGUF格式大语言模型的完整实战指南。详细阐述了为何GGUF格式是本地部署的最佳选择,并逐步指导用户如何将非GGUF模型(如Transformers格式)转换为GGUF格式,以及在LM Studio中进行加载、配置GPU卸载等关键优化,最终实现流畅的本地离线对话体验。

weixin_29061425的博客 916

使用IntelliJ IDEA进行代码重构

IntelliJ IDEA是一款强大的Java IDE,它提供了许多有用的功能,其中之一就是代码重构。代码重构是一种在不改变代码外部行为的情况下,对代码内部结构进行调整和优化的过程。下面我们将介绍如何使用IntelliJ IDEA进行代码重构。

宋志辉的博客 1663

Flow Matching实战:5步搞定图像生成模型优化(附PyTorch代码)

本文提供了一份基于Flow Matching框架优化图像生成模型的实战指南。通过五个关键步骤,详细讲解了从环境配置、核心概念梳理到构建向量场网络、设计损失函数、编写训练循环以及选择ODE求解器进行采样的完整流程,并附有可运行的PyTorch代码,帮助开发者快速掌握这一高效的生成式建模技术。

weixin_29065959的博客 319

Pika Labs vs Runway ML:零基础小白如何选择最适合自己的AI视频生成工具?

本文详细对比了Pika Labs和Runway ML两款AI视频生成工具,从操作界面、生成效果、隐藏成本、工作流适配性和未来兼容性五个维度进行分析。Pika Labs适合零基础用户快速生成社交媒体短内容,而Runway ML则更适合专业级视频制作。帮助用户根据自身需求选择最适合的AI视频生成工具。

wood5的博客 599

idea重构手法

四键齐发:ctrl+alt+shift+T 修改方法名:shift+F6 修改方法参数: Ctrl+F6

爱好jyh的博客 817

【Codex】Codex安装+DeepSeek API接入;无需登录,手把手带你使用codex

好多人使用codex时都卡在验证码登录那一步,今天就来介绍一种方法,不需要登录ChatGPT的账号,自然也就不需要手机验证码了;接入DeepSeek的api,一样可以丝滑使用codex;记录从零开始安装使用codex以及DeepSeek API接入的整个过程。不需要登录openAI;

AnChenliang_1002的博客 3535

Idea重构技巧

1、重命名方法、对象 选中右键 —> Refactor —> Rename;快捷键 Alt + Shift + r 2、快速提取变量 快速提取常量:选中右键 —> Refactor —> Extract —> Constants;快捷键Ctrl+Alt+C 快速提取变量:选中右键 —> Refactor —> Extract —>...

永生只是一场幻梦 6439

从点击图标到Activity亮屏:AMS、Zygote、ActivityThread的Binder协作之旅

Launcher通过Context调用 startActivity(),最终会通过 Activity.startActivity() 传递到 ActivityManager.getService(),获取AMS的Binder代理对象(IActivityManager)。这里的 attach() 方法通过Binder调用AMS的 attachApplication(),将新进程的 IApplicationThread 代理对象传递给AMS。这一步的Binder通信,是整个启动流程的关键转折点,值得细细品味。

大模型大数据攻城狮的专栏 1071

数学建模学习(121):Python实现模糊AHP(Fuzzy AHP)——从原理到实践

Python实现模糊AHP(Fuzzy AHP)

全栈川川 1539

IDEA代码重构小技巧(超实用)

程序员的成长之路互联网/程序员/技术/资料共享关注阅读本文大概需要 2.8 分钟。来自:cnblogs.com/Courage129/p/14383897.html一、重构函数1、提取方法2、合并方法3、方法重命名4、函数参数位置更改与重命名二、重构变量三、提取方法到父类一、重构函数1、提取方法提取想要的代码,按快捷键Ctrl+Alt+M,就会弹出框,写出方法名称即可提取一个方法2、合并方法反向...

良月柒 1754

uniapp - 使用web-view加载本地网页vue页面,用webview导入本地网页,uniAPP中使用web-view加载的本地及远程vue页面+双向通讯功能(兼容微信小程序、安卓苹果APP)

uniapp的App端web-view加载本地html,uniapp微信小程序webview加载本地HTML文件,在uniAPP中使用web-view加载的本地及远程vue页面且进行双向通讯,uni-app的web-view组件,支持加载远程网页,在app环境下,还支持加载本地HTML页面。uniapp WebView组件实现本地网页加载与通讯传值,uniAPP如何内嵌webView引入本地的vue网页示例代码,uniapp在web-view加载的本地及远程HTML中调用uni的API及网页和vue页面跳转

🏆 前端领域优质创作者 5226

基于IDEA快速重构代码的几种方式

重复代码审查的意义,如果有相似和相同的代码文件时,当一处存在bug需要修改多处, 对于相似文件来说,可能合并意义很大, 但是话说回来相似代码片段的话,业务代码可能存在大部分的相似之处,如何在扫描时,配置合理的重复行数,也挺难决策的,即使配合IDEA的Extract Method(快速提取方法)虽然可以很快重构,但是想事半功倍也挺难的。当你对某个封装的方法不满意时, 借助AI工具TONGYI Lingma 的Generate Optimization进行重构,适用于一些静态方式/ 内部逻辑的复杂的代码等。

Record Little 3007

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

IDEA代码重构

重构的目的: 提高代码的可读性、可维护性、可扩展性和性能。

清欢01的博客 1711

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Idea重构总结

Idea重构总结

u011250186的博客 1402

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

使用IntelliJ IDEA重构Java代码的最佳实践

分享一些在IntelliJ IDEA中重构Java代码的技巧和最佳实践。

u013643074的博客 1225

IntelliJ IDEA 如何创建一个新项目

3.然后一直下一步这样你就得到了一个空项目,可用来练习Java。

快来一起学习前端知识把!加油,前端人 514

IntelliJ IDEA 复杂的重构技巧

本文作者:ice1000 原文链接:http://ice1000.org/2017/12/21/IDEARefactoring/重构是 IDE 给人类生活带来便利的一个重要方面。但是 IDE 永远不是我们肚子里的蛔虫,有时我们会有复杂到 IDE 不可能直接提供的重构需求。下面我来告诉大家怎么利用有限的 IDE 重构功能, ~~创造无限的价值~~ 处理复杂的情况。复习一下快捷键先复习一下快捷键吧,我

程序猿DD 4956

IDEA构建新的项目

IDEA项目构建

WCF向光而行的技术分享 1455

IDEA代码重构技巧--抽取+内联

IDEA代码重构技巧--抽取+内联

左撇子帕布 5832

idea 基于现有项目,重新搭建新项目框架

在idea中基于现有项目的基础上,重新构建一个新项目的框架步骤: 1. 重命名模块名称 2.修改对应的pom文件 <!--列举出parent模块的修改,其他类似--> <!--修改前--> <artifactId>base-parent</artifactId> <modules> <module>base-core</module> <module>base-model&l

luffy_9527的博客 1907

IDEA 重构快捷键

前言        一次性的将IDEA的全部功能都贴出来似乎不好,遂分批整理!此次就来讲一下IDEA的重构快捷键。快捷键重命名文件、方法、属性等(rename):SHIFT+F6 提取当前选择为变量(extract variable):CTRL+ALT+V 提取当前选择为属性(extract field):CTRL+ALT+F 提取当前选择为常量(extract constant):CTRL+

jacker 3万+

IntelliJ IDEA重构时快速重新命名变量方法(Mac)

在代码重构时,把变量重新命名时,可以采取rename选中程序中所有该变量进行修改。 得到效果如下: 对于对方法的操作,需要增加参数时,也可以在调用时候增加,使用快捷键⌥ +return 键进行方法的重构。...

山鬼谣弋痕夕的博客 1万+

第三部分:Idea重构总结

第三部分:Idea重构总结 idea重构功能非常强大,特别是在java web方面,甚至能够重构html/css/js,下面我将为读者介绍idea的重构功能 重构快捷键Ctrl+Shift+Alt+T 这个快捷键是idea的重构功能,具体也可以在菜单栏中找到。Refactor -- Refactor This 最关键的是idea重构之后还...

weixin_33872660的博客 398
上一篇: 把长方形的构造函数写的文艺点儿
下一篇: 女友楼下的小超市
kiwi小白
博客等级 码龄14年 153粉丝 154原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值