【问题标题】:Find classes that does not override method查找不覆盖方法的类
【发布时间】:2016-10-19 15:25:35
【问题描述】:

IntelliJ IDEA 中是否有任何方法可以搜索不覆盖某个方法的类?

假设我有这些课程:

public abstract class BaseClass {
  public void methodThatMightBeOverridden() {
  }
}

public class ConcreteClassWithOverriddenMethod extends BaseClass {
  @Override
  public void methodThatMightBeOverridden() {
    super.methodThatMightBeOverridden();
  }
}

public class ConcreteClassWithoutOverriddenMethod extends BaseClass {
}

public class AnotherConcreteClassWithoutOverriddenMethod extends ConcreteClassWithoutOverriddenMethod {
}

是否可以在 IntelliJ 中找到所有不覆盖 methodThatMightBeOverridden()BaseClass 扩展?请注意,即使它们不直接实现BaseClass,我也需要查找类。在上面的示例中,这将是 ConcreteClassWithoutOverriddenMethodAnotherConcreteClassWithoutOverriddenMethod

我知道如何使用类型层次结构来查找方法被覆盖的类,但还没有找到相反的方法。

我试过用谷歌搜索它,但没有任何运气。此外,这是一个简化的示例。在实际代码中,我们有很多子类的实现,其中一些没有扩展类。

【问题讨论】:

  • 您可以将基类中的方法抽象化并检查您在哪些实现中遇到编译错误。不是 IntelliJ 的解决方案,但它应该可以工作。

标签: java intellij-idea


【解决方案1】:

我找到了对此的支持。通过站在方法上并按 Ctrl + Shift + H (或 Navigate -> Method Hierarchy 在菜单中),您可以很好地查看所有覆盖方法:

在这里,我将所有四个类都放在一个名为Test 的类中,如下所示,因此在类名后面有 "in Test" 文本。图片很容易解释,但减号表示该类没有覆盖该方法。

package test;

public class Test {

  public abstract class BaseClass {
    public void methodThatMightBeOverridden() {
    }
  }

  public class ConcreteClassWithOverriddenMethod extends BaseClass {
    @Override
    public void methodThatMightBeOverridden() {
      super.methodThatMightBeOverridden();
    }
  }

  public class ConcreteClassWithoutOverriddenMethod extends BaseClass {
  }

  public class AnotherConcreteClassWithoutOverriddenMethod extends ConcreteClassWithoutOverriddenMethod {
  }

}

【讨论】:

    【解决方案2】:

    您可以使用结构搜索。使用这样的搜索模板:

    class $A$ extends $B$ {
    
       void $m$();
    }
    

    Edit Variables 变量m 下的文本/正则表达式methodThatMightBeOverridden 和最小+最大出现次数为0。并且变量 B 具有 text/regexp BaseClassApply constraint within type hierarchy 复选框已启用。

    【讨论】:

    • 您的解决方案有效。但是,我的示例类被简化了,真正的类是通用的。我想有可能扩展结构搜索以允许泛型。
    猜你喜欢
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    相关资源
    最近更新 更多