为什么 像 spring-security 这样 的 spring 引导 库 在/src/main 中 有 Assert , 而 没有 为 这样 的 验证 抛出 异常 ?

js81xvg6  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(148)

当我从spring Boot 存储库中找到许多模块时,我可以在/src/main/中找到如下所示的Assert,

public OAuth2AccessToken(TokenType tokenType, String tokenValue, Instant issuedAt, Instant expiresAt,
            Set<String> scopes) {
        super(tokenValue, issuedAt, expiresAt);
        Assert.notNull(tokenType, "tokenType cannot be null");
        this.tokenType = tokenType;
        this.scopes = Collections.unmodifiableSet((scopes != null) ? scopes : Collections.emptySet());
    }

对于/src/main/下的所有此类验证,不应该使用要抛出的异常。
就我所读到的,Assert是用于/src/test/下的测试用例的。

eit6fx6z

eit6fx6z1#

这会抛出异常。“assertion”一词的意思是“声明某个东西应该是真的”,这可能发生在测试或运行时。你将Assert的概念与Java中的assert关键字或测试Assert库(如AssertJ)中的特定工具相结合。
在这个特定的例子中,所讨论的Assertorg.springframework.util.Assert

/**
 * Assert that an object is not {@code null}.
 * <pre class="code">Assert.notNull(clazz, "The class must not be null");</pre>
 * @param object the object to check
 * @param message the exception message to use if the assertion fails
 * @throws IllegalArgumentException if the object is {@code null}
 */
public static void notNull(@Nullable Object object, String message) {
    if (object == null) {
        throw new IllegalArgumentException(message);
    }
}

GuavaPreconditions和commons-lang Validate可提供类似设施;它们不被称为“assert,”但它们具有相同的语义。

相关问题