gpt4 book ai didi

java - 如何对我的方法输入参数设置验证约束?

转载 作者:搜寻专家 更新时间:2023-10-31 19:42:20 24 4
gpt4 key购买 nike

这是实现这个目标的典型方法:

public void myContractualMethod(final String x, final Set<String> y) {
if ((x == null) || (x.isEmpty())) {
throw new IllegalArgumentException("x cannot be null or empty");
}
if (y == null) {
throw new IllegalArgumentException("y cannot be null");
}
// Now I can actually start writing purposeful
// code to accomplish the goal of this method

我认为这个解决方案很丑陋。您的方法很快就会充满检查有效输入参数协定的样板代码,从而掩盖了方法的核心。

这是我想要的:

public void myContractualMethod(@NotNull @NotEmpty final String x, @NotNull final Set<String> y) {
// Now I have a clean method body that isn't obscured by
// contract checking

如果这些注释看起来像 JSR 303/Bean Validation Spec,那是因为我借用了它们。不幸的是,它们似乎并不是这样工作的;它们用于注释实例变量,然后通过 validator 运行对象。

many Java design-by-contract frameworks 中的哪一个提供与我的“喜欢拥有”示例最接近的功能?抛出的异常应该是运行时异常(如 IllegalArgumentExceptions),因此封装不会被破坏。

最佳答案

如果您正在寻找一个完全成熟的契约(Contract)设计机制,我会看一下 Wikipedia page for DBC 上列出的一些项目。 .

但是,如果您正在寻找更简单的东西,您可以查看 Preconditions来自 google collections 的类,它提供了一个 checkNotNull() 方法。所以你可以重写你发布的代码:

public void myContractualMethod(final String x, final Set<String> y) {
checkNotNull(x);
checkArgument(!x.isEmpty());
checkNotNull(y);
}

关于java - 如何对我的方法输入参数设置验证约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1809093/

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