我希望能够在IntelliJ IDEA中将实例方法从一个类移动到另一个类(来自福勒的“重构”的“移动方法”)。不幸的是,当我试着“移动...”(cmd: F6),它告诉我“没有引用类型的方法。你想让方法成为静态的,然后再移动吗?”我不想让我的方法成为静态的,我希望它成为另一个类上的实例方法。
我的代码示例:
public class TheClass {
public void doStuff(){
int i = themethod();
}
private int theMethod() {
System.out.println( "Hello World!" );
return 0;
}
}
public class OtherClass {
}假设我想将theMethod从TheClass迁移到OtherClass。IDEA中有没有针对这一点的自动重构,如果有:我该如何应用它?
发布于 2011-03-11 00:41:20
IDEA中的Move方法重构只考虑将方法移动到与其相关的类中,即用作其参数或返回值,或从方法内部调用。这是合乎逻辑的:如果方法与目标类没有任何具体的关系,那么它为什么会在目标类中?OTOH我发现这个限制在某些情况下,我仍然有一个有效的理由来移动方法。所以我不得不用手来做。
发布于 2014-11-03 00:22:41
在intellij 13.1 (在以前的版本中不知道)中,可以使用
在主菜单上选择[重构]|[提取]|[委托
但显然有一个“奇怪的”限制:它只能通过一个新创建的类来完成。因此,您必须在不创建"OtherClass“的情况下应用此重构(它将在您应用重构时直接创建)。
因此,在alredy创建的类上真正的“移动”方法似乎丢失了,相当奇怪的行为。
发布于 2017-12-17 01:40:18
还有另一种方法。假设你有下面的代码:
public int field;
public void foo(int a) {
assert field == a;
}你想让foo成为静态的。选择整个方法和preess Alt+Ctrl+M (提取方法)。键入与该方法相同的名称。选中“声明静态”复选框(仅当方法只读取字段而不修改字段时才可用),然后按“确定”。所以你会得到:
public void foo(int a) {
foo(a, field);
}
private static void foo(int a, int field) {
assert field == a;
}将静态方法移动到您想要的任何位置,并使用旧foo的主体来调用它。
https://stackoverflow.com/questions/5262803
复制相似问题