繁体   English   中英

在接口默认方法中抛出异常

[英]Throw exception in interface default method

最近我遇到了这段代码。

public interface CustomerQueryService {    
    default Customer getCustomerById(long id) {
        throw new NotImplementedException();
    }
}

后来,事实证明这是该项目的一般惯例。 这被认为是一种好习惯吗?

人们可以从这里开始看看Java的“代理父亲”之一Brian Goetz所说的“如何使用默认方法”。

所以,根据“书籍”; 一个人可以像你的例子一样使用它们:为一个被视为“可选”的方法抛出异常。 但这意味着:你已经有了一些方法; 你正在添加新的。

向Java语言添加默认方法的主要目的是允许对现有接口进行不间断的增强。 它们并不意味着被用作某种“混合”/多继承/特征 - 就像提供构造一样。

但除此之外:在你的例子中,你有一个新的界面......只有一个方法。 我认为这不属于那些“预期的用法”。

另一方面; 不要太“关于书”。 当整个团队都同意“这就是我们所做的”时,每个人都理解并购买; 为什么不?!

但有一点需要注意......我的C ++同事有一个严格的策略:它们允许继承树中任何抽象方法的一个实现; 因为在查看某些方法的错误实现时很难调试问题。 现在我们也可以继承Java中的默认方法了......对于我们来说,调试问题可能会以同样的方式变得更难。 所以要小心这些东西是如何使用的!

长话短说:如果您的大多数开发团队认为这是一种有用的做法,那么这是一个很好的做法。 如果不是,那就不是。

我会说它很糟糕,因为异常类型和报告它是项目中的惯例。

NotImplementedException

NotImplementedException表示作者此时尚未在程序中实现逻辑的情况。 这可以作为基于TODO标签的例外。

因此,这是一种在所有CustomerQueryService为方法提供实现的懒惰方法,只是为了在运行时找到您尚未编写的方法。

注意UnsupportedOperationException某些情况下可能是可接受的,但对于项目来说都不是一个好的“约定”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM