我需要在我的项目中修复一个错误,但事实证明,根本原因是由于设计问题导致的所有接口实现的许多变通方法的影响。我想重构那个界面,但我现在不能这样做,因为我没有时间改变所有的实现。所以我的意思是在这个接口中添加一个默认方法,并在一个实现中实现它(部分修复设计问题),然后在下一个sprint中进行大量重构。这种重构是关于替换此接口中的所有方法以获得更简单和更有意义的方法。其中一种新方法是问题的默认方法。
但实际上这种方法不需要实现,它只是一个向正确方向发展的临时解决方案。
实现抛出UnsupportedOperationException的默认方法(在界面中)是否有意义?
答案 0 :(得分:0)
默认方法背后的整个想法是提供向接口添加方法而不会自动破坏现有实现。看起来这就是你打算做的事情,所以这是有道理的。
但是你评论说:
我要在我需要修复的实现类中覆盖它 该bug然后调用这个新方法而不是前一个方法 这没有意义。
如果您要在界面的任何实例上调用新方法,那么您需要确信它会执行适当的操作。如果您提出的默认实现总是抛出UnsupportedOperationException
并假设这是不合需要的,那么这种调用是否有可能,那么这可能不能证明这种信任。
如果你以某种方式确实有理由确信只在一个特定实现类的实例上调用新方法,那么你使用接口的方式或者你实际上并不需要完全改变界面。也就是说,如果您知道正在使用的实现,则可以单独将新方法添加到该类,而无需更改接口。