k13*_*13i 4 java interface exception java-8 default-method
最近我遇到了这段代码.
public interface CustomerQueryService {
default Customer getCustomerById(long id) {
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
后来,事实证明这是该项目的一般惯例.这被认为是一种好习惯吗?
人们可以从这里开始看看Java的"代理父亲"之一Brian Goetz所说的"如何使用默认方法".
所以,根据"书籍"; 一个人可以像你的例子一样使用它们:为一个被视为"可选"的方法抛出异常.但这意味着:你已经有了一些方法; 你正在添加新的.
向Java语言添加默认方法的主要目的是允许对现有接口进行不间断的增强.它们并不意味着被用作某种"混合"/多继承/特征 - 如提供构造.
但除此之外:在你的例子中,你有一个新的界面......只有一个方法.我认为这不属于那些"预期的用法".
另一方面; 不要太"关于书".当整个团队都同意"这就是我们所做的"时,每个人都理解并购买; 为什么不?!
但有一点需要注意......我的C++同事有一个严格的策略:它们允许继承树中任何抽象方法的一个实现; 因为在查看某些方法的错误实现时很难调试问题.现在我们也可以继承Java中的默认方法了...... 对于我们来说,调试问题可能会以同样的方式变得更难.所以要小心这些东西是如何使用的!
长话短说:如果您的大多数开发团队认为这是一种有用的做法,那么这是一个很好的做法.如果不是,那就不是.
我会说它很糟糕,因为异常类型和报告它是项目中的惯例.
NotImplementedException表示作者此时尚未在程序中实现逻辑的情况.这可以作为基于TODO标签的例外.
因此,这是一种为所有方法提供实现的惰性方法,CustomerQueryService只是为了在运行时找到您尚未编写的方法.
UnsupportedOperationException在某些情况下,注意可能是可接受的,但对于项目来说,这两者都不是一个好的"约定".
| 归档时间: |
|
| 查看次数: |
1428 次 |
| 最近记录: |