如何防止错误:null> 0 java

时间:2018-06-14 11:21:29

标签: java if-statement null

我目前有一个enumlist。枚举列表随机填充,因此有可能值为null。这是合乎逻辑的,因为它没有被填满。

问题还在于我的代码:

if (player.Enumlist().get(CART_BLACK) > 0) {
}

Java抛出NullPointerException。有什么东西我可以添加到if语句来防止这个错误吗?

6 个答案:

答案 0 :(得分:4)

如果get(CART_BLACK)可能会返回null:

获取条件之前的值,如果为null,则将其替换为负值:

Integer cartBlack = player.Enumlist().get(CART_BLACK);
if (cartBlack == null) cartBlack = -1;

if (cartBlack > 0) {

如果player.Enumlist()可能会返回null

类似但不完全相同:

final Enumlist list = player.Enumlist();
final int cartBlack = list == null ? -1 : list.get(CART_BLACK);

if (cartBlack > 0) {

答案 1 :(得分:3)

您需要防范 nullity

$toAddresses = explode(',', $result["to_addresses"]);
foreach($toAddresses as $a) {
$toAddresses2 = explode('@', $a);
    foreach($toAddresses2 as $b) {
        echo $b.'<BR>';
    }
}

或更高效的版本:

123
test.domain.com
ff
g.com

答案 2 :(得分:1)

if( player.Enumlist().get(CART_BLACK) != null && player.Enumlist().get(CART_BLACK) > 0) {

}

这样做是因为从左到右检查ifs,如果一个条件失败,其余条件将不会被评估,你将无法获得NPE。

答案 3 :(得分:1)

最后纠正问题会产生诀窍,但这并不好,因为这意味着它可能会发生在其他调用中。此外,因此,您可以通过过度使用非空保护来完成,因为您永远不会知道null是否是正常情况。

所以你应该赞成使用Optional(Java 8或Guava)作为返回而不是null来使你的API更清晰(它可能返回一个空的东西,所以传达它)并且更强大(包含的对象必须专门解包。) 例如:

Optional<Integer> optValue = player.Enumlist().get(CART_BLACK);
optValue.filter(v -> v > 0)
        .ifPresent( v -> ...);

答案 4 :(得分:1)

您需要进行空检查:

Class Name                                                             |   Objects | Shallow Heap
--------------------------------------------------------------------------------------------------
                                                                       |           |             
org.apache.catalina.loader.ParallelWebappClassLoader                   |         1 |          136
|- java.lang.Class                                                     |     6,123 |      114,928
|- java.lang.Package                                                   |       628 |       35,168
|- sun.reflect.DelegatingClassLoader                                   |        37 |        2,368
|- java.security.ProtectionDomain                                      |        53 |        2,120
|- org.quartz.simpl.SimpleThreadPool$WorkerThread                      |        10 |        1,360
|- java.util.WeakHashMap$Entry                                         |         9 |          360
|- java.util.TimerThread                                               |         2 |          256
|- org.apache.axis2.engine.AxisConfiguration                           |         1 |          176
|- org.quartz.core.QuartzSchedulerThread                               |         1 |          176
|- org.springframework.aop.framework.ProxyFactoryBean                  |         2 |          176
|- java.util.ResourceBundle$LoaderReference                            |         5 |          160
|- org.springframework.beans.factory.support.DefaultListableBeanFactory|         1 |          120
|- org.springframework.web.context.support.XmlWebApplicationContext    |         1 |           96
|- java.net.URLClassLoader                                             |         1 |           80
|- org.apache.axis2.i18n.MessageBundle                                 |         1 |           48
|- java.util.Hashtable$Entry                                           |         1 |           32
|- java.lang.ref.WeakReference                                         |         1 |           32
|- java.lang.reflect.WeakCache$CacheKey                                |         1 |           32
'- Total: 18 entries                                                   |           |             
--------------------------------------------------------------------------------------------------

你还应该检查if (player == null || player.Enumlist () == null) { throw new Exception("Player or Enumlist cannot be null"); } 值是不是Integer,但我想如果你编写代码那会很奇怪。

您正在使用null,最终可能会给您get。您可以使用IndexOutOfBoundsException方法或size

进行检查
streams

答案 5 :(得分:0)

您可以检查Null是否也使用try..catch block

处理异常
   try
    {
      if( player.Enumlist().get(CART_BLACK)!=null && player.Enumlist().get(CART_BLACK) > 0) 
        {
        }
    }
    catch(NullPointerException)
    {
    //handle exception here
    }