gpt4 book ai didi

java - Guava 是否支持合约类,或者是否允许接口(interface)文档?

转载 作者:行者123 更新时间:2023-11-30 08:10:38 29 4
gpt4 key购买 nike

我正在查看 Guava 的先决条件。如果您在实现方法中使用它们,那就太好了,但是是否可以使用它们来声明接口(interface)契约?

例如,在 C# 合约中,您可以执行此操作 -

using System.Diagnostics.Contracts;

[ContractClass(typeof(FooContract))]
interface IFoo
{
void Bar(int i);
}

[ContractClassFor(typeof(IFoo))]
abstract class FooContract : IFoo
{
public void Bar(int i)
{
Contract.Requires(i >= 0);
}
}

Guava 中可能有这样的事情吗?如果没有,是否有另一个java库可以实现这一点?

最佳答案

契约式设计是一种非常优雅的方法,但在 Java 中从未流行起来。早期的实现使用 XDoclet,然后使用 AOP 代理进行注释,最后是字节码预处理。某些实现的开销、它们的框架依赖性以及被定义为元数据使大多数开发人员无法在实践中采用该方法。有一些库,例如 Contracts For Java ,但很少有人积极维护。

更常见的是显式验证检查,例如Java的Objects.requireNonNull和Guava的PreconditionsJSR-303 Bean Validation对于数据模型来说相当常见,但很少在接口(interface)上使用。对于接口(interface),更流行的是依靠单元测试和库的帮助,例如 Guava 的 NullPointerTester,以确保契约(Contract)得到遵守。许多人喜欢的样式选择是使用 JSR-305改进文档,Findbugs 和 ErrorProne 等静态分析器可以验证。 JSR-308类似,但尚未流行。

关于java - Guava 是否支持合约类,或者是否允许接口(interface)文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30434816/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com