Eclipse 中的方法重构

问题描述 投票:0回答:3

我尝试在 Eclipse IDE (JDT) 中执行以下重构步骤,但找不到所需的重构,并且无法记住所有步骤的名称。我检查了SourceMacking的重构,但没有找到正确的。

我们以以下场景为例:

class A {

    method(B b) {
      doSomethingWithA();
      b.doSomethingWithB();
    }

    [...]
}

class B {
    [...]
}


1)使方法static(缺少重构的名称?):

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 支持。

java eclipse ide refactoring eclipse-jdt
3个回答
3
投票

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

使用 IntelliJ

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

使用 Eclipse

  1. 使方法静态:Eclipse 不直接支持它,但我们可以使用其他两个重构来实现这一点。

    1.1。 引入间接

    结果

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

    1.2。 内联

    结果

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

  3. 转换为实例方法:现在,这就是棘手的地方。如果您想从步骤 1 转到步骤 3,您可以使用 Eclipse 的 Move Method,它会完美地处理所有事情。然而,据我所知,没有任何方法可以使用 Eclipse 的自动重构从步骤 2 转到步骤 3。

0
投票

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

错误 10605 错误 118032 错误 338449

所以基本上这是一个“Won't-Fix”没人关心的功能请求,所以我可能是时候切换到 IntelliJ 了。我必须考虑一下这个问题......

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

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

这很有趣,但同样不会是自动重构,并且从一开始就违背了重构的目的。添加某人自己的代码会带来失败的可能性,并且需要重新运行测试套件,从而导致无法安全地重构遗留代码。


0
投票

使方法静态:Eclipse 不直接支持它,但我们可以使用其他两个重构来实现这一点。

2024:[Eclipse 4.31 确实支持它](https://eclipse.dev/eclipse/news/4.31/jdt.php#new-make-static-refactoring!

新建静态重构

Eclipse 的 Java 开发工具 (JDT) 中添加了名为“Make Static”的新重构,可在可能的情况下将实例方法转换为静态方法。

此重构在方法声明中添加了一个额外的参数,以处理对原始方法中的实例字段、方法或类的引用。

对该方法的现有调用会相应地更改,如果需要额外的参数,则重构会传递“this”或最初用于访问该方法的特定实例。

要应用此重构,必须满足以下条件:

  • 该方法不是构造函数。
  • 该方法不会重写父类型中的方法,也不会在任何子类型中重写。
  • 声明方法的类型不是本地类型、匿名类型或注释。
  • 可以通过选择方法调用来执行重构,但选择超级方法调用的情况除外。

© www.soinside.com 2019 - 2024. All rights reserved.