Intellij idea Intellij,重构派生类以从不同类扩展

Intellij idea Intellij,重构派生类以从不同类扩展,intellij-idea,structural-search,Intellij Idea,Structural Search,我有一个面向对象的基类结构,大约有10个类是从这个基类派生的。我希望专门化它,并且需要更改这10个类从哪个类扩展而来 因此,我: B One extends B Two extends B Three extends B ... 我需要将此更改为: B B2 extends B One extends B2 Two extends B2 Three extends B2 ... Intellij没有手动遍历类,而是具有重构功能,可以让我将从B派生的所有类改为从B2派生吗?您可以进行全局搜索和

我有一个面向对象的基类结构,大约有10个类是从这个基类派生的。我希望专门化它,并且需要更改这10个类从哪个类扩展而来

因此,我:

B
One extends B
Two extends B
Three extends B
...
我需要将此更改为:

B
B2 extends B
One extends B2
Two extends B2
Three extends B2
...

Intellij没有手动遍历类,而是具有重构功能,可以让我将从B派生的所有类改为从B2派生吗?

您可以进行全局搜索和替换,只需将“扩展B”更改为“扩展B2”

但也有一种更干净的方法

  • 将类B重命名为类B2,现在所有继承自B2
  • 然后添加“extendsb”并创建类B(作为快速修复提供)
  • 在B2中运行重构“向上拉成员”,选择您想要移动到B的任何方法

您可以使用结构搜索和替换。搜索:

class $A$ extends B {}
替换为:

class $A$ extends B2 {}

我最终做了那些事,但这涉及到一些手工工作,使一切正常。我在寻找一些智能的东西,我认为IDE的重构技巧可能会有。上面的Bas向我指出了“结构搜索”和“结构搜索与替换”功能,这比我预期的还要聪明。我不知道“结构搜索”和“结构搜索与替换”功能。刚试过,比我想象的还要聪明。看起来$A$自动将其作为变量提供,您可以将不同的搜索参数连接到该变量。我可以想象它的各种用途。谢谢你让我意识到这一点。这也是我越来越喜欢Intellij的另一个原因。