具有 UnsupportedOperationException 实现的默认方法

Default method with UnsupportedOperationException implementation

我需要修复我的项目中的一个错误,但事实证明,根本原因是由于设计问题,许多解决方法散布到接口的所有实现中。我想重构那个接口,但我现在做不到,因为我没有时间更改所有实现。所以我的想法是在这个接口中添加一个默认方法,并只在一个实现中实现它(部分修复设计问题),然后在下一个 sprint 中进行大重构。此次重构是将此接口中的所有方法替换为更简单、更有意义的方法。这些新方法之一是问题所涉及的默认方法。

但实际上这个方法不需要实现,它只是一个临时的解决方案,朝着正确的方向发展。

实现抛出 UnsupportedOperationException 的默认方法(当然是在接口中)是否有意义?

默认方法背后的整个想法是提供在不自动破坏现有实现的情况下向接口添加方法。看来这就是你的提议,所以就目前而言,这是有道理的。

但是您在评论中说:

I'm gonna override it in the implementation class that I need to fix the bug and then call this new method instead of the previous one which doesn't make sense.

如果您要在接口的任何实例上调用新方法,那么您需要确信它会执行适当的操作。如果您建议的默认实现总是抛出 UnsupportedOperationException(并且假设这是不可取的),那么这种调用可能无法证明这种信心。

如果您确实有理由相信新方法只会在一个特定实现的实例上调用 class 那么要么您使用接口的方式有些奇怪,要么您没有实际上根本不需要更改界面。也就是说,如果您知道您正在使用的实现是什么,则可以将新方法单独添加到 class,而无需更改接口。