当前位置: 首页 > 知识库问答 >
问题:

是否应该在生产代码中使用assert语句断言not null?[关闭]

咸浩初
2023-03-14
class CustomObject {
    private Object object;

    @Nullable
    public Object getObject() {
        return (object == null) ? generateObject() : object;
    }
}

现在想象一下我是这样使用的:

public void useObject(CustomObject customObject) {
    object = customObject.getObject();
    assert object != null;
    // Do stuff using object, which would throw a NPE if object is null.
}

我被告知我应该删除断言,它们永远不能用于生产代码,只能用于测试。那是真的吗?

共有1个答案

方河
2023-03-14

为此使用objects.requirenonnull(Object)

检查指定的对象引用是否为空。此方法主要用于在方法和构造函数中进行参数验证,[...]

在您的情况下,这将是:

java prettyprint-override">public void useObject(CustomObject customObject) {
    object = customObject.getObject();
    Objects.requireNonNull(object); // throws NPE if object is null
    // do stuff with object
}
Foo foo = Objects.requireNonNull(service.fetchFoo());

// you cannot write it in one line.
Bar bar = service.fetchBar();
assert bar != null;
service.foo(Objects.requireNonNull(service.getBar()));

// you cannot write it in one line.
Bar bar = service.getBar();
assert bar != null;
service.foo(bar);
 类似资料:
  • 本文向大家介绍Python断言assert的用法代码解析,包括了Python断言assert的用法代码解析的使用技巧和注意事项,需要的朋友参考一下 在开发一个程序时候,与其让它运行时崩溃,不如在它出现错误条件时就崩溃(返回错误)。这时候断言assert 就显得非常有用。 python assert断言是声明布尔值必须为真的判定,如果发生异常就说明表达式为假。 可以理解assert断言语句为rais

  • 稳定性: 2 - 稳定的 assert 模块提供了一组简单的断言测试集合,可被用于测试不变式。 assert(value[, message]) 新增于: v0.5.9 value <any> message <any> assert.ok() 的别名。 assert.deepEqual(actual, expected[, message]) 版本历史 版本 变更 v8.0.0 Set and

  • 由来 Java中有assert关键字,但是存在许多问题: assert关键字需要在运行时候显式开启才能生效,否则你的断言就没有任何意义。 用assert代替if是陷阱之二。assert的判断和if语句差不多,但两者的作用有着本质的区别:assert关键字本意上是为测试调试程序时使用的,但如果不小心用assert来控制了程序的业务流程,那在测试调试结束后去掉assert关键字就意味着修改了程序的正常

  • Python assert 语句,又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行;反之,Python 解释器会报 AssertionError 错误。 assert 语句的语法结构为: assert 表达式 assert 语句的执行流程可以用 if 判断语句表示,如下所示: if 表达式==True:     程序继续执行 else:

  • 问题内容: 在某些情况下,我喜欢将缓冲显示为的功能,这会给我带来好处,但程序包名称使我有点担心在生产代码中使用它。我了解它 主要 用于测试,但是不确定我是否在生产代码中使用它时遇到麻烦。 我在吸引命运吗? 问题答案: 您不应在生产中使用此代码。无论您要实现什么目标。 最终目的是促进 测试 ,因此始终会在考虑测试的情况下进行扩展,优化( 重写) 。只要可以使该软件包更好地进行测试,就可以在该软件包中

  • 因此,我正在考虑向json视图添加约束。 我有和这门课相似的课 我应该保留和吗?还是应该删除一个,为什么? 只是为了清楚,因为Jackson 2.6确实会抛出异常。 我正在使用springfox-swagger,看起来当我删除时,swagger中的字段被标记为可选,而不是。 我只是想知道这种情况下的最佳做法。