Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 避免(或委派?)NPE的模式_Java_Scala - Fatal编程技术网

Java 避免(或委派?)NPE的模式

Java 避免(或委派?)NPE的模式,java,scala,Java,Scala,在代码评审中,为了避免NPE,我偶然发现了这种java模式: value = (null != someObject) ? someObject.someOtherMethod() : null 我怀疑这是“好风格”。我更倾向于认为它代表了NPE(顺便说一句,这听起来类似于映射Scala选项值或Haskell值…) 它的风格好还是不好?如果没有,如何改进 编辑:如果它分散了您的代码,代码将无法读取: 这已经封装在一些库/API中了吗?(apache commons、google coomons

在代码评审中,为了避免NPE,我偶然发现了这种java模式:

value = (null != someObject) ? someObject.someOtherMethod() : null
我怀疑这是“好风格”。我更倾向于认为它代表了NPE(顺便说一句,这听起来类似于映射Scala选项值或Haskell值…)

它的风格好还是不好?如果没有,如何改进

编辑:如果它分散了您的代码,代码将无法读取: 这已经封装在一些库/API中了吗?(apache commons、google coomons或类似的!?)

可能会对您有所帮助

另请参阅。

也许会对您有所帮助


另请参见。

此模式既不好也不好。您需要在上下文中对其进行评估

关键问题是为什么
someObject
可以有
null
值,以及它是否有意义。。。或者一只虫子

  • 一方面,
    null
    可能具有特定的含义(例如,“值未指定”),代码可能以合法的方式处理该含义

  • 另一方面,
    null
    可能是bug的症状(例如,有人忘记初始化某些东西)。在这种情况下,代码正在传播损害和/或使bug的来源更难找到。。。因此很糟糕


一般来说,许多代码/编码人员认为,避免意外NPE的最佳方法是在整个代码库中大量散布这样的内容,作为预防措施。事实上,这样做完全是错误的。正确的方法是让NPE发生(或者更好的是,强迫它发生——参见@vacuum的答案),找出意外的
null
来自哪里。。。并删除源。而且(当然!)您需要进行广泛的测试,以便在投入生产之前获得意外的空值


在我看来,最好的做法是将
null
视为错误,除非它有明确的定义和文档化的含义。

这种模式既不好也不好。您需要在上下文中对其进行评估

关键问题是为什么
someObject
可以有
null
值,以及它是否有意义。。。或者一只虫子

  • 一方面,
    null
    可能具有特定的含义(例如,“值未指定”),代码可能以合法的方式处理该含义

  • 另一方面,
    null
    可能是bug的症状(例如,有人忘记初始化某些东西)。在这种情况下,代码正在传播损害和/或使bug的来源更难找到。。。因此很糟糕


一般来说,许多代码/编码人员认为,避免意外NPE的最佳方法是在整个代码库中大量散布这样的内容,作为预防措施。事实上,这样做完全是错误的。正确的方法是让NPE发生(或者更好的是,强迫它发生——参见@vacuum的答案),找出意外的
null
来自哪里。。。并删除源。而且(当然!)您需要进行广泛的测试,以便在投入生产之前获得意外的空值


在我看来,最好的做法是将
null
视为错误,除非它有明确的定义和文档化的含义。

这个习惯用法不可能封装在API中。它需要一流的语言支持(或者该语言需要支持宏),特别是如果您希望将返回链中的任意多个步骤推广到通用


我喜欢避免在这些检查中乱丢代码,因此在一些项目中,我发现自己使用了一段反射代码,它接受一个字符串,并将其解释为一系列方法调用,并且做了正确的事情。当然,输入不安全,但很多时候这并不是一个主要问题。

这个习惯用法不可能封装在API中。它需要一流的语言支持(或者该语言需要支持宏),特别是如果您希望将返回链中的任意多个步骤推广到通用


我喜欢避免在这些检查中乱丢代码,因此在一些项目中,我发现自己使用了一段反射代码,它接受一个字符串,并将其解释为一系列方法调用,并且做了正确的事情。当然,输入不安全,但很多时候这不是一个主要问题。

如果
null
最终可以优雅地处理,但无法在那里处理,那么它是一个完全合理的模式


如果
null
确实不能被优雅地处理,那么它就会适得其反。最好快速失败。

如果
null
最终可以优雅地处理,但无法在那里处理,那么这是一种完全合理的模式


如果
null
确实不能被优雅地处理,那么它就会适得其反。最好快速失败。

风格价值判断问题与StackOverflow无关。你可能会尝试,但我也不知道这是否是他们的事情。
如何改进
-好吧,就这一行代码而言,没有什么需要改进的,除非我们知道你将在哪里使用你的
?@t.J.Crowder。这是一段非常有效的代码,在某些情况下正是人们所需要的。只有在错误的位置使用NPE时,才会延迟NPE。已删除样式标签。但我仍然想知道,这是否存在于任何库中……样式值判断问题对于StackOverflow来说都是离题的。你可能会尝试,但我也不知道这是否是他们的事情。
如何改进
-好吧,就这一行代码而言,没有什么需要改进的,除非我们知道你将在哪里使用你的
?@t.J.Crowder。这是一段非常有效的代码,正是人们在某些情况下所需要的