草庐IT

java - Java重构练习

我刚刚阅读了以下论文,发现它非常有用:http://www.objectmentor.com/resources/articles/Clean_Code_Args.pdf我正在寻找类似的论文/书籍/教程/等。提供有关重构和/或正确类设计的分步练习。我读过Fowler的“重构”,但我一直在寻找更具体的例子。 最佳答案 您可能找不到太多关于逐步重构大型示例的资源。因为您永远无法涵盖所有​​类型的示例。MartinFowler在“重构”中使用小而简单的示例的原因是因为几乎每一大块坏代码都是不同坏气味的组合。通过学习如何识别特定的难闻气味,

java - Lombok 项目中的 IDE 重构支持

ProjectLombok试图减少我们Java8代码库中的样板代码。缺点是它限制了工具支持(重构、静态分析)。例如,在我使用IntelliJ的实验中,重构用@Builder注释的类的字段,不再有效。我知道没有解决方法(您必须手动修复使用Builder的旧方法名称的位置)。另一个例子是在Eclipse中“查找引用”在一个字段上找不到引用,但一个好的解决方法是打开大纲并在生成的getter/setter上应用“查找引用”。我的问题:它破坏了主要IDE(尤其是Eclipse、IntelliJ)的哪些重构功能?是否有好的解决方法? 最佳答案

java - 将 Hibernate 实体重构为子类

我有一个当前使用Hibernate映射为数据库表中的实体的类。此类应重构为一个抽象类,其中包含一些其所有子类共有的字段。我正在使用注释来映射hibernate实体/关系类。我想要有关如何进行此重构的建议/变体。此外,关于如何将存储在数据库中的数据(用于future的抽象父类(superclass))移动到具体子类之一的一些建议。 最佳答案 首先,我将创建父类(superclass)并添加必要的注释。您必须在以下两者之间做出决定:每类一table策略每个类层次策略单表加入子类策略我认为JoinedSubclass可以在这里工作。您添加

java - 在 Eclipse 中将静态方法重构为实例方法

我该如何重构classPlugh{staticvoidfoo(Barbar);}进入classBar{voidfoo();}使用Eclipse?IOW将静态方法变成参数之一的实例方法。 最佳答案 删除“static”关键字,然后进行“MoveMethod”重构。它应该提供“Bar”作为目标类。(Eclipse只对非静态方法执行此操作对我来说似乎很疯狂,但这就是它的工作方式。对我来说这似乎是一个错误。也许我应该做出贡献来修复它,而不是仅仅提示关于它!;-) 关于java-在Eclipse中

Java——重构两个几乎相同的方法

我有两种方法,一种计算被认为具有低于给定对象的值的对象的数量,另一种计算具有高于给定对象的值的对象的数量。您可能会说,这两种方法实际上是相同的:publicintcountHigher(SomeObjecta){if(a==null){throwetc...}intnumberHigher=0;for(SomeObejectb:this.listOfSomeObjects){if(b.compareTo(a)==1){numberHigher++;}}returnnumberHigher;}publicintcountLower(SomeObjecta){if(a==null){thr

java - 重构java代码

好吧,我猜这个问题看起来很像:Whatisthebestwaytoreplaceorsubstituteif..elseif..elsetreesinprograms?考虑关闭此问题!我想重构看起来像这样的代码:Stringinput;//inputfromclientsocket.if(input.equals(x)){doX();}elseif(input.equals(y)){doY();}else{unknown_command();}它是检查来自套接字的输入以执行某些操作的代码,但我不喜欢ifelse结构,因为每次向服务器添加新命令(代码)时都会有一个新的if必须添加其他内容

java - 如何有效且高效地重构遗留代码?

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicates:WhatshouldIkeepinmindinordertorefactorhugecodebase?Whenisitgood(ifever)toscrapproductioncodeandstartover?我目前正在处理一些遗留源代码文件。它们有很多问题,因为它们是由不太了解Java的数据库专家编写的。例如,类中的字段是公开的。没有getter和setter。使用原始类型,而不是参数化类型。不必要地使用static。超长方法名。方法需要太多参数。经常重复自己。我想修改它们,使它们更面向对象。有哪些最佳实

java - 将 foreach 重构为 for 循环

我在Java中有一个foreach循环(这里是简化版)Listnames=getNames();for(Stringname:names){doSomething(name);}有没有一种自动化的方法可以将其重构为传统的for循环?我知道如何手动完成Listnames=getNames();for(inti=0;i如您所见,for语句本身需要进行一些输入,还需要再次引入变量name并为其赋值名称.get(i)。总的来说,手动编辑对我来说太容易出错了。我为什么要这样做?我必须修复一个错误,修复方法是从索引1而不是索引0开始,并在索引n-1而不是结束处结束(不幸的是我无法立即修复输入,我需

java - 通过重构简化代码

是否有重构工具,无论是C语言还是Java语言,都可以简化这种冗余代码。我相信这称为数据传播。这本质上就是优化编译器会做的事情。publicintfoo(){inta=3;intb=4;intc=a+b;intd=c;System.out.println(c);returnc;}进入publicintfoo(){intc=7;System.out.println(c);returnc;} 最佳答案 我认为这不是一个好主意。例如下面的代码:longhours=5;longtimeInMillis=hours*60*1000;这比只是:l

java - 如何扩展Eclipse的重命名重构完成后触发另一个重构

我正在尝试扩展eclipse的重命名重构以调用另一个重命名重构。publicclassPerson{...}publicclassPersonDAO{publicListgetPersonByName(Stringname){...}}将类Person重命名为User后,我希望像getPersonByName这样的方法重命名为getUserByName。我已经扩展了RenameParticipant并尝试通过使用JDT重命名重构和ASTRewrite来实现它。问题是我创建的修改和原来的rename重构修改有冲突。我无法使用postCreateChange(似乎基本处理器只返回null)