2

如果在一个 A 类中:

Class A
    public List<string> getValues

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

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 而不是空列表,但是我不知道在现实生活中是否会发生这种情况,因为如果它可能为 null 那么它总是好的检查而不是尝试捕获异常,哪个更合适?

4

2 回答 2

6

简而言之,不,您不应该总是检查。您使用的方法的规范应该始终清楚地说明您期望的可能结果的语义是什么。因此,例如,如果您希望 getValues 在没有值时返回一个空列表,并且错误地编写了它以使其返回一个空对象,那么 NullPointerException 是完全正常的事情。警告您您弄乱了方法的规范或其实现。另一方面,getValues 也可能由于某些条件未满足而返回 null 对象。在这种情况下,你应该检查一下,因为它实际上意味着什么。

于 2013-03-05T11:34:59.307 回答
0

如果您已让您的方法返回 null,那么您必须始终在执行任何操作之前检查 null。

在您的情况下,如果您不检查 null 并且 A.GetValues 恰好是 null ,那么它将引发异常

于 2013-03-05T11:34:05.753 回答