我应该总是检查返回值是否为空吗?

本文关键字:是否 返回值 检查 我应该 | 更新日期: 2023-09-27 18:02:12

如果在一个类A:

Class A
    public List<string> getValues

如果我想调用该方法,我应该总是检查返回值是否为空吗?虽然我不认为它可以是空的(应该是一个空列表)。例如

Class B
    public void GetSomething
        foreach (var thing in A.getValues)
            //do something....

Class B
    public void GetSomething
        var things = A.getValues;
        if (things != null)
        foreach (var thing in things)
            //then doing something....

问这个问题的原因是,当我写单元测试,我使方法在类A返回null而不是空列表,但我不知道在现实生活中是否发生,因为如果它可以是空的,那么它总是很好的检查,而不是尝试捕捉异常,哪一个更合适?

我应该总是检查返回值是否为空吗?

总之,不,您不应该总是检查。您所使用的方法的规范应该始终清楚地说明您所期望的可能结果的语义。例如,如果你期望getValues在没有值的时候返回一个空列表,而你错误地编写了它,所以它返回一个空对象,那么NullPointerException是一个完全正常的事情。它警告你,你搞砸了你的方法的规范或它的实现。另一方面,也可能因为没有满足某些条件而导致getValues返回空对象。在这种情况下,你应该检查一下,因为实际上是指什么的

如果你让你的方法返回null,那么你必须在做任何操作之前检查null。

在你的情况下,如果你不检查null和a.t getvalues碰巧为null,那么它会抛出一个异常