【问题标题】:How to identify all classes implementing a specific interface that do NOT extend some base class?如何识别所有实现特定接口但不扩展某些基类的类?
【发布时间】:2019-06-19 09:17:20
【问题描述】:

我有一些接口Action,并且大多数实现该接口的类都派生自某个基础AbstractAction。但我假设有一些类实现了该接口,但没有扩展该基类。

有没有办法使用 IntelliJ 来识别这些类? (理想情况下:使用社区版)

编辑:这不是 How to show all parents and subclasses of a class in IntelliJ IDEA? 的副本,因为我希望结合“实现 X 而不是扩展 Y”之类的条件。

【问题讨论】:

  • 先生,我认为 Intellij 社区版没有这个选项,我不知道终极版。
  • 有否被否决者投票?
  • 我认为没有像 Eclipse 和 Idea 这样的 IDE 提供此功能。我认为应该将这种功能添加到 IDE 中进行更多分析。
  • 请问您的用例是什么?也许你可以使用 checkstyle 配置来警告一个类是否实现了 X 而没有扩展 Y?
  • @sfiss 我想为所有操作添加自定义 toString() 方法。我会将它放在基类中,但可以肯定的是,它还需要进入任何其他实现接口但不从基类继承的类。

标签: java intellij-idea


【解决方案1】:

仅适用于 Intellij IDEA 终极版
我唯一想到直接使用 Intellij IDEA 解决问题的方法是生成 uml class diagrammAction 接口。

这使您可以直观地搜索层次结构模式。

这里以JTextComponent 为例:

另一种方法 - 为工作使用正确的工具

jqassistant 是一个工具,可以分析您的 java 代码及其关系并将其存储到 neo4j 数据库中。 这使您可以使用cypher 将您的问题描述为图形查询。

最简单的入门方法是

示例: 查找所有实现aInteface 的类的查询看起来像

MATCH (i:Interface {name:"aIntefaces"}  )<-[:IMPLEMENTS]- (c) RETURN i,c

对您的问题的查询如下所示:

MATCH 
   (i:Interface {name:'Action'}  )<-[:IMPLEMENTS|EXTENDS*1..10]- (class), 
   (abstractAction:Class {name:'AbstractAction'}) 
   where not (class)-->(abstractAction)   
RETURN class

【讨论】:

  • JetBrains 支持告诉我研究“结构搜索/替换”,但现在,我喜欢使用 jQasssistant 的想法。
  • 如果您想在今天获得另一个接受...也许结帐stackoverflow.com/questions/56667478/… ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
  • 2019-04-07
  • 2014-01-02
  • 1970-01-01
相关资源
最近更新 更多