【问题标题】:How separate method calls with eclipse?如何用eclipse单独调用方法?
【发布时间】:2012-05-07 13:31:38
【问题描述】:

我使用 IDE Eclipse 来编写 java 代码。我有一个这样的类结构:

class Item
{
    private ItemId id;
    public ItemId getId()
    {
        return this.id;
    }
}

class ItemId {/*just some class*/}

我也有一个通过它ItemId恢复项目的实用方法,方法具有以下签名:

UtilityClass.utilityMethod(ItemId id);

所以,有很多这样的调用:

Item unpredictableItemName = ...
UtilityClass.utilityMethod(unpredictableItemName.getId());

ItemId unpredictableIdName = ...
UtilityClass.utilityMethod(unpredictableIdName);

我想写一个新方法,它将使用已经构造的 Item 对象:

UtilityClass.utilityMethod(Item item);

所以问题是: 如何转移来电

UtilityClass.utilityMethod(unpredictableItemName.getId())

UtilityClass.utilityMethod(unpredictableIdName)?

【问题讨论】:

  • 如果没有质量数,您可以弃用或直接删除旧方法。这将在 Eclipse 中突出显示存在事件的位置,您可以一一解决。
  • 我知道这种方式,但我想要一个自动化的,它可以代替我做这件事。 (一个一个真的很长而且容易出错)。

标签: java eclipse plugins methods refactoring


【解决方案1】:

使用正则表达式文本搜索和替换来替换:

UtilityClass.utilityMethod\((.*)\.getId\(\)\)UtilityClass.utilityMethod\(\1\)

然后手动修复方法签名。

【讨论】:

  • 看来替换后 UtilityClass.utilityMethod(variableName.getId()) 变成了 UtilityClass.utilityMethod(1) 所以我怎么知道使用了什么 varName (如果有一些带有 Item 类型的变量) ?
  • 检查您输入的替换字符串是否正确。您想键入\1,它指的是搜索表达式中(.*) 的内容。有可能你已经离开了```。这就是您使用正则表达式搜索的原因(检查搜索对话框中的正则表达式框)。
【解决方案2】:

选择utilityMethod(ItemId id),右键单击并选择重构> 更改方法签名。选择选项以保留原始方法并弃用它。您最终会在UtilityClass 中使用这两种方法,并且由于弃用,原始调用者将被标记。然后,您可以使用上面的正则表达式选项,或者只使用弃用警告随着时间的推移进行迁移。

【讨论】:

  • 不,实际上这对他的情况不起作用(我试过了,你也应该)。
  • @FrancisUpton,你是对的,但它可以部分帮助迁移。我更新了答案以反映这一点。请考虑删除反对票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多