首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用IntelliJ IDEA应用"move method“重构?

如何使用IntelliJ IDEA应用"move method“重构?
EN

Stack Overflow用户
提问于 2011-03-11 00:38:08
回答 3查看 17.5K关注 0票数 27

我希望能够在IntelliJ IDEA中将实例方法从一个类移动到另一个类(来自福勒的“重构”的“移动方法”)。不幸的是,当我试着“移动...”(cmd: F6),它告诉我“没有引用类型的方法。你想让方法成为静态的,然后再移动吗?”我不想让我的方法成为静态的,我希望它成为另一个类上的实例方法。

我的代码示例:

代码语言:javascript
复制
public class TheClass {

  public void doStuff(){
     int i = themethod();
  }

  private int theMethod() {
    System.out.println( "Hello World!" );
    return 0;
  }
}

public class OtherClass {

}

假设我想将theMethodTheClass迁移到OtherClass。IDEA中有没有针对这一点的自动重构,如果有:我该如何应用它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-11 00:41:20

IDEA中的Move方法重构只考虑将方法移动到与其相关的类中,即用作其参数或返回值,或从方法内部调用。这是合乎逻辑的:如果方法与目标类没有任何具体的关系,那么它为什么会在目标类中?OTOH我发现这个限制在某些情况下,我仍然有一个有效的理由来移动方法。所以我不得不用手来做。

票数 8
EN

Stack Overflow用户

发布于 2014-11-03 00:22:41

在intellij 13.1 (在以前的版本中不知道)中,可以使用

在主菜单上选择[重构]|[提取]|[委托

但显然有一个“奇怪的”限制:它只能通过一个新创建的类来完成。因此,您必须在不创建"OtherClass“的情况下应用此重构(它将在您应用重构时直接创建)。

因此,在alredy创建的类上真正的“移动”方法似乎丢失了,相当奇怪的行为。

票数 8
EN

Stack Overflow用户

发布于 2017-12-17 01:40:18

还有另一种方法。假设你有下面的代码:

代码语言:javascript
复制
public int field;

public void foo(int a) {
    assert field == a;
}

你想让foo成为静态的。选择整个方法和preess Alt+Ctrl+M (提取方法)。键入与该方法相同的名称。选中“声明静态”复选框(仅当方法只读取字段而不修改字段时才可用),然后按“确定”。所以你会得到:

代码语言:javascript
复制
public void foo(int a) {
    foo(a, field);
}

private static void foo(int a, int field) {
    assert field == a;
}

将静态方法移动到您想要的任何位置,并使用旧foo的主体来调用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5262803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档