Eclipse支持重构火车残骸

时间:2012-02-15 14:13:33

标签: java eclipse refactoring

eclipse可以进行这种重构吗?

假设我有一个包含List的类:

class DomainObject {
    private List list;
    public List getList() { return list; }
}

然后一些使用该类的代码需要这样做:

domainObject.getList().get(23);

我想对此进行重构(并让其他所有引用都这样做):

domainObject.get(23);

我尝试了一些选项,但似乎无法找到一种方法(手动除外)

2 个答案:

答案 0 :(得分:7)

试试这个:

  1. DomainObject正确实施List(使用list作为代表)
  2. getList()返回this
  3. Refactor-Inline getList()
  4. (可选)再次移除"implements List"并保留get()方法
  5. 另一个(更简单的)选项:

    1. 重构 - 将getList()重命名为getMyListWithAUniqueNameAcrossTheProject()(让Eclipse更新所有引用)
    2. "getMyListWithAUniqueNameAcrossTheProject()."
    3. 搜索 - 替换""
    4. 添加并实施DomainObject.get(int)

答案 1 :(得分:0)

我认为你想要的是 Refactor - >介绍间接...... 。我不确定如何使用它,我认为你必须在List.get上调用它,指定你想在DomainObject中创建方法......

我试过这里,但是eclipse需要花费大量时间来计算它(我想要查找对该方法的所有引用)

修改:我找到了an article on the subject,这让我觉得这可能不是你想要的。但是,如果Eclipse足够聪明,我猜不会将该方法声明为静态。它仍然没有在这里完成,但我发现Bug 187227 Introduce Indirection is extremely slow这是由于它所适用的方法名称很常见,所以我想它在{{1}的情况下是不可用的} ...