2016-08-05 53 views
0

我有一个臃肿的JDialog类(〜2000行),显示两个不相关的JTables。我想将它分成三个类(JDialog,Jtable1和JTable2)。我可以研究每个表使用哪些变量和哪些方法并将它们移动到相关的类,但是这种手动重构将会很乏味。代码分离到不同的类[Java]

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


为了达到这个目的,脚本应该有一个令牌累加器。第一个令牌是,例如来自panel.add(jTable2)的jTable2。现在检查其中有jTable2的所有行,并向累加器添加标记。重复搜索相关标记,直到未发现新标记为止。现在为每个标记查找包含它的行。扩大选择以包含括号。

很难相信可以说是最大语言的程序员还没有创建这样的工具。这应该与在IDE中查找使用工具非常相似。

+0

“可以说是最大的语言” - 我认为这是一个很好的问题,直到我读了这个补充。我不认为你明白重构是如何完成的。其他语言有多少人做过这样的事情?我的猜测是“没有”。 – duffymo

回答

1

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

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

+0

这就是我一直在寻找的东西。思考很有趣,提取所有可能相关的代码行不是。很高兴知道重构 - >移动就是这个聪明。 – sixtytrees

+0

“其他IDE具有类似的功能” - 包括IntelliJ。没有什么是自动的。 – duffymo

6

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

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

但它不会为你想。

一条建议:如果您有单元测试,以小增量进行测试,并使用版本控制系统,那么您会有更好的运气。写一个测试,做一个改变,表明测试仍然通过,提交改变,重复。

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

我认为你可以做得更好:看看移动侦听器并将代码处理出UI。由于人们学习将所有内容都塞进UI类,所以Swing应用程序最终需要大类。如果你分解它,你会发现代码更容易阅读,更模块化,更容易进行单元测试。

+0

我使用Mercurial。 – sixtytrees

+0

最佳选择。我相信你会好起来的。 – duffymo

0

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

基本上,有一些生产质量工具可以帮助你提取类,一旦你知道什么是你想要放在类中。值得注意的是,IntelliJ的IDEA有一个很好的“提取类”重构。

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