将代码分离到不同的类[Java]

时间:2016-08-05 15:51:22

标签: java refactoring automated-refactoring

我有一个膨胀的JDialog类(~2000行),显示两个不相关的JTable。我想将它分成三个类(JDialog,Jtable1和JTable2)。我可以研究每个表使用哪些变量和哪些方法并将它们移动到相关的类,但是这种手动重构将是乏味的。

有没有办法自动化这种重构?

要实现这一点,脚本应该有一个令牌累加器。第一个令牌是,例如来自panel.add(jTable2)的jTable2。现在检查所有包含jTable2的行,并将标记添加到累加器。重复搜索相关的令牌,直到找不到新的令牌。现在为每个令牌找到包含它的行。展开选择以包括括号。

很难相信可论证的最大语言的程序员还没有创建这样的工具。这应该与IDE中的find usages工具非常相似。

3 个答案:

答案 0 :(得分:6)

自动?不,谢天谢地。重构需要思考。还没有深度学习。

大多数IDE(例如来自JetBrains的IntelliJ,市场上最好的IDE)具有出色的重构支持。

但它不会为你考虑。

一条建议:如果你有单元测试,你会有更好的运气,用小增量咬合,并使用版本控制系统。编写测试,进行更改,显示测试仍然通过,提交更改,重复。

您可以随时返回上一个工作版本。你不会做出比单一增量步骤更大的混乱。

我认为你可以做得更好:看看移动监听器和处理代码的UI也是如此。 Swing应用程序最终会出现大型课程,因为人们会学习将所有东西塞进UI类中。如果你将它分解,你会发现代码更容易阅读,更模块化,更容易进行单元测试。

答案 1 :(得分:1)

在NetBeans中,您可以使用Refactor-> move。它启动一个向导,方便地显示相关方法。您需要选择要移动的它们,但不必在代码中搜索。其他IDE具有类似的功能。

这样你仍然需要思考,但找到它们的无聊部分是由IDE完成的。

答案 2 :(得分:0)

看一下提出类似问题的帖子(How to refactor thousands of lines of Java code? Is there any tool available?)。

基本上,有一些生产质量工具可以帮助您在知道要放入类中的内容后提取类。值得注意的是,IntelliJ的IDEA有一个很好的"提取类"重构。

更难的部分是确定应该进入这些课程的内容。 AFAIK,只有研究工具可用。