在java中避免使用!= null有什么好处?

Ave*_*try 4 java null

我已经阅读了这个主题:避免!= null语句,但我没有看到好处.

  1. 如果返回空数组,则需要检查"实数"数组的位置以及空数组的位置.

  2. getName() != null您必须使用,而不是使用类似的代码getName().length > 0.作为一个例子,我正在研究项目,我需要用少量的归档器来压缩一些数据,并决定选择尺寸最小的压缩数据.如果我从归档器"compress"方法返回null,我需要检查返回的值是否为null.如果我决定返回一个空数组,那么我还需要检查它是否为空.

我对吗?

Ale*_*ing 11

使用空集合或"空白"操作而不是null的主要优点是,大多数情况下,此类对象仍然可以在代码中工作而无需进一步修改.从null本质上讲,价值更容易出错.

请使用以下代码,例如:

String[] names = data.getNames();
if (names != null) {
    for (String name : names) {
        // Do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

检查null是必需的,否则您将获得NPE.使用标准for循环不能解决问题.在另一方面,如果你知道你将总是得到某种类型的数组,你的代码将工作,没有额外的检查.如果数组为空,则循环将不会运行.问题解决了.

对于实现某种形式的操作的代码也是如此.另一个例子:

Action myAction = data.getActionToRun();
if (myAction != null) {
    myAction.run();
}
Run Code Online (Sandbox Code Playgroud)

再次,你需要null检查.如果保证动作存在,那么你可以随时调用action.run()没有副作用,但空白动作不会做任何事情.就这么简单.

在许多情况下,null如果修改方法返回方式,则可以简单地丢弃检查,从而导致更简单易懂的代码.在某些情况下,返回null正确的选择(例如,从一组键和值中获取对象),因为没有默认的"无动作"值.但是null表明缺少一个值,它需要额外的处理是接收器.使用空白,无动作,非空对象允许数据对象处理错误.这是很好的封装.这是很好的编程.它只是有效.™

最后,返回null肯定不是处理错误的好方法.如果事情在你的代码出错应该永远不会出错,除非你是程序员做了一个编程错误,使用assertS或异常.那些都是失败的.不要将其null用作失败案例,将其用作简单的缺乏值.

  • @AvershinDmitry这不一定是最好的解决方案.听起来像方法应该*never*返回一个空值(或一个空数组),除非出现错误.那不是个好主意.如果出现错误,请改为抛出异常. (2认同)

Ole*_*ksi 7

空数组有时会返回更自然的对象.考虑一下这样的代码:

String [] elements = getElements();

for (String element : elements)
   System.out.println(element);
Run Code Online (Sandbox Code Playgroud)

如果返回一个空数组(即没有元素),则不会打印任何内容,代码将正确执行.但是,如果getElements()返回null,您将获得空指针异常.为了防止它,你需要添加更多的代码,这使事情变得更加复杂.返回一个空数组可以在没有附加代码的情况下实现所需的行为.