[英]Throw exception in interface default method
最近我遇到了这段代码。
public interface CustomerQueryService {
default Customer getCustomerById(long id) {
throw new NotImplementedException();
}
}
后来,事实证明这是该项目的一般惯例。 这被认为是一种好习惯吗?
人们可以从这里开始看看Java的“代理父亲”之一Brian Goetz所说的“如何使用默认方法”。
所以,根据“书籍”; 一个人可以像你的例子一样使用它们:为一个被视为“可选”的方法抛出异常。 但这意味着:你已经有了一些方法; 你正在添加新的。
向Java语言添加默认方法的主要目的是允许对现有接口进行不间断的增强。 它们并不意味着被用作某种“混合”/多继承/特征 - 就像提供构造一样。
但除此之外:在你的例子中,你有一个新的界面......只有一个方法。 我认为这不属于那些“预期的用法”。
另一方面; 不要太“关于书”。 当整个团队都同意“这就是我们所做的”时,每个人都理解并购买; 为什么不?!
但有一点需要注意......我的C ++同事有一个严格的策略:它们允许继承树中任何抽象方法的一个实现; 因为在查看某些方法的错误实现时很难调试问题。 现在我们也可以继承Java中的默认方法了......对于我们来说,调试问题可能会以同样的方式变得更难。 所以要小心这些东西是如何使用的!
长话短说:如果您的大多数开发团队认为这是一种有用的做法,那么这是一个很好的做法。 如果不是,那就不是。
我会说它很糟糕,因为异常类型和报告它是项目中的惯例。
NotImplementedException表示作者此时尚未在程序中实现逻辑的情况。 这可以作为基于TODO标签的例外。
因此,这是一种在所有CustomerQueryService
为方法提供实现的懒惰方法,只是为了在运行时找到您尚未编写的方法。
注意UnsupportedOperationException
在某些情况下可能是可接受的,但对于项目来说都不是一个好的“约定”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.