java - 如何将代码提取到 Eclipse 中的静态方法中,并将字段作为参数传递?

标签 java eclipse refactoring indirection

考虑到这个简化的场景:

private String name;

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

我想使用私有(private)静态大写(String)方法将名称大写。如果我将 name 提取到方法中 (CTRL-2 + M),那么我会得到一个引用 nameprivate String Capitalize() 方法字段。

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

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

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

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

最佳答案

这是一个可行的序列:

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

现在您可以将大写移动到您喜欢的位置。

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

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

关于java - 如何将代码提取到 Eclipse 中的静态方法中,并将字段作为参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30790100/

相关文章:

java - 在java中的首选项中更改true false

java - 如何仅交换 eclipse 实例之间的键绑定(bind)

java - 解析JSON文件(JAVA)

JavaCard 小程序不适用于 RSA 加密

java - 如何按集合大小总和对 Map<String, List<Set<Long>>> 进行排序?

java - 如何检查我使用的是哪个版本的 Eclipse 编译器?

C#:重构雷诺数计算器

angularjs - 将通用 Controller 功能提取到基本 Controller 中

Javascript 重构 - 怎么做?

java - Spring/Spring boot 链式 bean 实例化的最佳实践是什么?