我尝试在Eclipse IDE(JDT)中执行以下重构步骤,但无法找到所需的重构,也无法记住所有步骤的名称。我在SourceMacking检查了重构,但找不到正确的重构。
我们以下面的场景为例:
class A {
method(B b) {
doSomethingWithA();
b.doSomethingWithB();
}
[...]
}
class B {
[...]
}
1)使方法 静态 (缺少重构的名称?):
class A {
static method(A a, B b) {
a.doSomethingWithA();
b.doSomethingWithB();
}
[...]
}
class B {
[...]
}
2) 移动 方法:
class A {
[...]
}
class B {
static method(A a, B b) {
a.doSomethingWithA();
b.doSomethingWithB();
}
[...]
}
3)转换为 实例方法 :
class A {
[...]
}
class B {
method(A a) {
a.doSomethingWithA();
doSomethingWithB();
}
[...]
}
因此,任何知道在Eclipse中逐步执行此操作的人或者知道重构的名称都是受欢迎的。目标是为每一步都提供IDE支持。
答案 0 :(得分:2)
不幸的是,Eclipse的重构功能并不像其他IDE那样完整(例如Jetbrains' IntelliJ)。我将包含有关如何执行IntelliJ和Eclipse所请求的每个重构的说明。
使用IntelliJ
使用Eclipse
Make Method Static:Eclipse并不直接支持它,但我们可以使用其他两个重构来实现这一点。
<强>结果强>
public static void method(A a, B b) {
a.method(b);
}
public void method(B b){
doSomethingWithA();
b.doSomethingWithB();
}
1.2。 Inline
<强>结果强>
public static void method(A a, B b) {
a.doSomethingWithA();
b.doSomethingWithB();
}
答案 1 :(得分:0)
在学习了重构之后被称为'转换为实例方法'我搜索了Eclipse JDT的bug数据库,我发现了坏消息:
Bug 10605 Bug 118032 Bug 338449
所以基本上它是一个Won't-Fix noone cares功能请求,所以也许是时候我也切换到IntelliJ了。我不得不考虑这个......
Emond Papegaaij在Bug 118032的讨论中提出了一个解决方法:
一个简单的解决方法是创建静态方法,从您想要变为静态的方法调用此静态方法并内联方法调用。这在4.3.1中适用于我。
这很有趣,但同样不会是自动重构,并且首先会破坏重构的目的。添加某人自己的代码会导致失败的可能性,并且需要重新运行测试套件,导致无法安全地重构遗留代码。