我如何检查空指针异常

时间:2012-08-16 05:50:01

标签: java nullpointerexception hashmap

这是代码

private static HashMap naturalNumbers = new HashMap();

static
{
    naturalNumbers.put("zero", new Integer( 0 ) );
    naturalNumbers.put("one", new Integer( 1 ) );
    naturalNumbers.put("two", new Integer( 2 ) );
    naturalNumbers.put("three", new Integer( 3 ) );
}

private static int findANumber( String partOfaNumber ) throws Exception
{
int multiplicand = 0;  
multiplicand += (Integer)naturalNumbers.get( partOfaNumber );

如果“get”返回null,我该如何检查?

我试过了:

if ( (Integer)naturalNumbers == null )
    {
        throw new Exception( "Number not found" );
    }
 return multiplicand;
}

但IDE甚至不接受它:无法从HashMap转换为Integer。

7 个答案:

答案 0 :(得分:5)

这是一个略有不同的版本:

private static final HashMap<String, Integer> NUMS = new HashMap<String, Integer>();

static
{
    NUMS.put("zero", 0);
    NUMS.put("one", 1);
    NUMS.put("two", 2);
    NUMS.put("three", 3);
}

private static int findANumber(final String partOfaNumber) throws IllegalArgumentException
{
    int multiplicand = 0;  
    final Integer theNum = NUM.get(partOfaNumber);
    if (theNum != null) {
        multiplicand += theNum;
    } else {
        throw new IllegalArgumentException("Number not found (" + partOfNumber + ")");
    }

    return multiplicand;
}

答案 1 :(得分:2)

这很简单。

Integer number = naturalNumbers.get( partOfaNumber )
if(number ==null) {
    throw new Exception("Number not found");
} else {
    multiplicand += number;
}
return multiplicand;

答案 2 :(得分:1)

您可以使用以下速记 -

  

multiplicand + = naturalNumbers.get(partOfaNumber)== null? 0:   (整数)naturalNumbers.get(partOfaNumber);

答案 3 :(得分:1)

private static int findANumber( String partOfaNumber ) throws Exception
{
  int multiplicand = 0;  
  if (naturalNumbers.containsKey( partOfaNumber ); {
    multiplicand += (Integer)naturalNumbers.get( partOfaNumber );
  } else {
    throw new Exception("Number not found");
  }
  return multiplicand;
}

答案 4 :(得分:1)

只需检查密钥是否存在于Hashmap中。你不必担心Null-Pointer Exception。

if(naturalNumbers.containsKey( partOfaNumber )){
  //Do your stuff
}else{
  //Do some stuff what you will when exception throw.
}

您也可以使用

按值搜索
naturalNumbers.containsValue( value)

答案 5 :(得分:0)

由于java上的自动装箱机制,你总是必须为原始类型的集合添加空值检查

可以生成一个简单的空指针,如下所示

Integer i = null;
i=i+10;

因此,请始终为null添加默认检查,在您的情况下,您可以添加如下

Integer multiplicand = 0;
Integer value = get(key);

if(value!= null)
{
//add value to multiplicand
}

答案 6 :(得分:0)

首先,最好使用特定的HashMap

private static HashMap<String, Integer> naturalNumbers = new HashMap<String, Integer>();

将摆脱令人讨厌的铸造。

至于你的问题,你试图将哈希映射转换为整数,这不是你想要的。您想检查是否存在特定值。更好的方法是提取值并检查null:

int multiplicand = 0;
Integer part = naturalNumbers.get(partOfNumber)

if(part == null) {
   // Handle the null case
}

multiplicand += part;

现在,问题是,在价值不存在的情况下,您打算做什么。如果将不存在的值定义为零,则可以执行类似这样的操作

multiplicand += (naturalNumbers.contains(partOfNumber)?naturalNumbers.get(partOfNumber):0;

这使它更简洁。但是,如果值不包含在HashMap中,则取决于您要执行的操作。