0

鉴于这个简化的场景:

private String name;

private String getString() {
    return "Hello, " + name + "!";
}

我想用一种private static capitalize(String)方法将名称大写。如果我提取name到一个方法(CTRL-2 + M)中,那么我会得到一个private String capitalize()引用该name字段的方法。

这是期望的结果:(在实现大写之前)

private static String capitalize(String name) {
    return name;
}

我真的很想capitalize保持静态,因为我可以将它移动到其他类(SHIFT-ALT-V)。此外,当有多个字段时,将它们移动到参数是很乏味的。

有什么方法可以提取方法,或者引入将字段作为参数传递的间接方法?它不需要是一次重构;组合可能仍然可以节省打字和人为错误。

4

2 回答 2

1

这是一个可行的序列:

  1. 提取对name新局部变量 ( Alt-Shift-L) 的字段引用,将其称为“toCap”
  2. 从对 的引用中提取一个方法toCap,称之为“大写”
  3. 添加修饰符staticcapitalize
  4. 内联额外的局部变量toCap( Alt-Shift-I)。

现在你可以搬到capitalize你喜欢的地方了。

对于这个确切的场景,它可能不值得(直接创建静态大写方法更简单),但我可以看到在更复杂的情况下,这个重构序列实际上可以提供帮助。

这个序列背后的一般模式是:在提取方法之前,使用新的局部变量准备所有要传递给方法的参数。提取方法后,内联不需要的局部变量。

于 2015-06-12T16:30:16.470 回答
0
  1. 提取要变为静态的方法部分。是的,这仍然是指字段。
  2. 制作新方法static
  3. 在调用者中,将字段作为参数传递(使用有关无法从静态方法访问的字段的警告作为参考)。
  4. CTRL-1调用者中提取的方法,然后选择+ Change method: Add parameter

提取的静态方法现在应该具有隐藏字段的参数,因为它们具有相同的名称。

于 2015-06-16T14:35:23.583 回答