如何使用参数重构对新方法的调用?

时间:2019-06-06 07:44:24

标签: java intellij-idea refactoring automated-refactoring

我在这里有此代码:

assertThat( new Whatever(TestPerson.class, ReadOnly.class) .foo(), is(bar));

在单元测试中。我认为我将需要多个不同的此类调用,这些调用仅在第二个参数中有所不同。所以我想创建一个辅助方法,以便我可以做

assertThat( makeFor(ReadOnly.class) .foo(), is(bar));

我想为此使用IntelliJ的重构功能,但是当选择new Whatever.... .class)并使用 Extract方法时,两个参数都将在生成的方法中“硬编码”。但是我只希望第一个参数是硬编码的,而第二个则是新方法的参数。

现在我想知道:是否有一种优雅的方法可以执行一些神奇的IntelliJ重构动作?没有我在提取该方法后手动添加参数吗?

1 个答案:

答案 0 :(得分:2)

您必须组合两个重构动作,并且了解不同的组合是保存和快速重构的关键。

我想到两种不同的组合:

  1. 您使用extract methodalt+ctrl+m)重构,提取该方法后,选择ReadOnly.class使用extract parameteralt+ctrl+p )重构。

  2. 您可以通过ReadOnly.classextract variable)精炼来提取alt+ctrl+v作为变量。然后,选择new Wahtever(...代码并使用extract methodalt+ctrl+m),最后选择提取的变量并使用inline variablealt+ctrl+n)。

使用1.工作流程时,您有机会Intellij Idea将检测到重复项并提出签名更改建议,并且还将提取其他方法。这取决于方法调用的相似程度。

BTW:这就是释放IDE力量的知识。我猜我键入的代码少于一半。其余的由重构动作和生成器生成。

示例:

null通过后缀完成检查:

someObject.null <tab>

将导致:

if (someObject != null) {
    <CURSOR>
}

Live templates是另一种以可执行方式存储相同代码模式的方式。