繁体   English   中英

Eclipse中的方法重构

[英]Method refactoring in Eclipse

我尝试在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支持。

不幸的是,Eclipse的重构功能不如其他IDE(例如Jetbrains的IntelliJ )完整。 我将提供有关如何执行IntelliJ和Eclipse请求的每个重构的说明。

使用IntelliJ

  1. 使方法静态
  2. 移动实例方法
  3. 转换为实例方法

使用Eclipse

  1. 将方法设为静态:Eclipse不直接支持它,但是我们可以使用另外两个重构来实现。

    1.1。 介绍间接

    Eclipse的引入间接重构

    结果

     public static void method(A a, B b) { a.method(b); } public void method(B b){ doSomethingWithA(); b.doSomethingWithB(); } 

    1.2。 排队

    Eclipse的内联重构

    结果

     public static void method(A a, B b) { a.doSomethingWithA(); b.doSomethingWithB(); } 
  2. 移动静态成员

  3. 转换为实例方法:现在,这变得棘手了。 如果您想从第1步转到第3步,则可以使用Eclipse的Move方法 ,它将完美地处理所有事情。 但是,我没有使用Eclipse的自动重构从第2步到第3步的方法。

在了解到重构被称为“转换为实例方法”之后,我搜索了Eclipse JDT的错误数据库,发现了一个坏消息:

错误10605 错误118032 错误338449

因此,基本上,这是一个无需解决的功能,无人问津,因此也许我该改用IntelliJ了。 我必须考虑一下……。

Emond Papegaaij在Bug 118032的讨论中建议了以下解决方法:

一个简单的解决方法是创建静态方法,从要变为静态的方法中调用此静态方法,然后内联该方法调用。 这在4.3.1中对我有效。

这很有趣,但同样不会自动重构,并且首先会破坏重构的目的。 添加某人自己的代码会导致失败的可能性,并且需要重新运行测试套件,从而导致无法安全地重构遗留代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM