gpt4 book ai didi

java - 为什么断言不应该用于公共(public)方法中的参数检查?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:35:57 25 4
gpt4 key购买 nike

嗯,在我有限的 Java 经验中,我从来没有真正使用过断言,并且想知道为什么我在很多网站和很多书上都阅读了处理断言的相同警告,即不应使用断言语句用于公共(public)方法中的参数检查?

我想知道这是否与 assert 语句相对于 Java 中其他语句的执行顺序有关。

最佳答案

断言的目的是检查您的程序逻辑——断言失败是“停止一切——有错误!”适应症。特别是,断言失败表示“这里有错误”,但是“这里”是代码内部的某个地方,失败的原因只能真正确定通过检查您的代码(您的 API 用户不能也不应该这样做)。

当您通过 API 获得错误数据时,您想表明“嘿!你给了我错误数据!” IllegalArgumentException 及其同类是表明这一点的方式。

(但请注意,您的代码中对参数使用断言检查没有任何问题——您不支持将由您团队以外的人使用的真正“公共(public)”API。 )

但这确实提出了另一点:在合理/可能的范围内,您应该“捕获”由于您自己的错误而可能发生的 IllegalArgumentException 之类的内部异常,并将它们转换为 FatalError 异常或类似的异常,因此用户当您的代码中存在错误时,您的 API 不会被引导去寻找错误的参数。

(另请注意 public 之间的区别——Java 关键字——和“公共(public)接口(interface)”——意思是一些接口(interface)作为“正式”API 提供给个人使用在你的编程团队之外。我们在这里担心的是后一种情况。)

关于java - 为什么断言不应该用于公共(public)方法中的参数检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13832487/

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