![](/img/trans.png)
[英]Feature or bug: unable to override enum method with default implementation of UnsupportedOperationException
[英]Default method with UnsupportedOperationException implementation
我需要修复项目中的错误,但实际上,根本原因是由于设计问题而导致针对接口的所有实现散布了许多变通方法。 我想重构该接口,但现在不能这样做,因为我没有时间更改所有实现。 因此,我的想法是在此接口中添加默认方法,并仅在一个实现中实现它(部分解决设计问题),然后在下一个sprint中进行较大的重构。 这种重构是关于将此接口中的所有方法替换为更简单,更有意义的方法。 这些新方法之一是问题所涉及的默认方法。
但是实际上,此方法不需要实现,它只是一个朝着正确方向发展的临时解决方案。
实现该默认方法(当然是在接口中)并抛出UnsupportedOperationException是否有意义?
默认方法背后的全部思想是提供向接口添加方法的功能,而不会自动破坏现有的实现。 您似乎打算这样做,所以就目前而言,这是有道理的。
但您在评论中指出:
我将在实现类中重写它,我需要修复该错误,然后调用此新方法,而不是前一个没有意义的方法。
如果要在接口的任何实例上调用新方法,则需要确信它会做一些适当的事情。 如果您的提议的默认实现可能会始终引发UnsupportedOperationException
(并且假设这是不希望的),则有可能导致这种调用,那么这可能并不能证明这种信心。
如果您确实有理由相信仅在一个特定实现类的实例上调用新方法,那么您使用接口的方式会很奇怪,或者实际上根本不需要更改接口。 也就是说,如果您知道正在使用哪种实现,则可以将新方法单独添加到该类中,而无需更改接口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.