2016-08-23 45 views
0

假设内嵌类我有这些类:与超类使用重构

class GoodClass 
{ 
    //... stuff... 
    public GoodClass(...) {...} 
    //... stuff... 
} 

class BadClass extends GoodClass 
{ 
    public BadClass(...) {super(...);} 
} 

class SomeOtherClass extends BadClass 
{ 
    //... stuff... 
} 

我想删除BadClass和使用GoodClass无处不在。

有没有办法用IntelliJ IDEA轻松实现?因此,它应该用GoodClass直接替换BadClass的所有用法:应该更改变量/字段类型,应该替换构造函数调用,继承类应该更改它们的父代,以及其他所有事情,如果我忘记了某些内容。

我试过使用“内联类”,但它不符合我的期望。

+0

你有没有尝试过简单的找到所有,替换(按Ctrl + Shift + R)> BadClass与GoodClass?然后删除改名BadClass,显然 –

+0

也许不是直接的,因为你正在做的是不是全吹重构。你能保证'BadClass'和'GoodClass'之间的使用是相互兼容的吗?也就是说,在'BadClass'中调用的任何方法是否会返回与'GoodClass'相同的东西? – Makoto

+0

@ cricket_007查找/替换作品,但不完美。例如。如果我有一个字段“BadClass badClass”,我希望在重构之后有一个“GoodClass goodClass”(类似于类重命名重构)等等。 – kan

回答

3

Find/Replace将完成70%的工作。您可能需要稍后修复软件包名称。

另一个想法

  1. 重命名GoodClass到WantedClass;
  2. 重命名(在IDE上)BadClass为GoodClass;
  3. 关闭你的IDE;
  4. 转到src目录,删除GoodClass.java(旧的BadClass);
  5. 现在将WantedClass.java重命名为GoodClass.java
  6. 将其打开并更改类名称。
+0

另一个想法可能会起作用 – baao

+0

不需要关闭IDE。只是使用简单的文件删除,而不是“安全删除”。 也“结构搜索和替换”的作品,但有时会崩溃的IDE ... – kan

+0

注意。我说要关闭IDE,因为它在任何IDE上都是安全的。 – danielbathke