2012-12-08 61 views
1

我知道有很多关于Java的空指针异常的线程在这里,但我仍然无法弄清是怎么回事是什么原因造成我的空指针异常

我试图想出一个解决方案传递相关性发布在http://codekata.pragprog.com/2007/01/kata_eighteen_t.html

的传递相关性add_direct方法应该将char和由空格分隔的单个空格分隔的字符放入ArrayList中。然后我尝试插入一个ArrayLists的HashMap,其中初始char是关键字,我的解析ArrayList是项目。这是我的NullPointerException发生的地方。我追踪了所有这些数据结构,并没有一个具有空值。我不明白是什么导致我的例外。请参阅我的代码:

public class Test_Dependencies 
{ 
    public static void main(String[] args) { 
      Dependencies Dep = new Dependencies(); 
      Dep.add_direct('A', "B C"); 
    } 
} 


public class Dependencies { 
     HashMap dependenciesList; 


public Dependencies() 
{ 
    HashMap<Character, ArrayList> dependenciesList = new HashMap<Character, ArrayList>(); 
} 

public void add_direct(char mainItem, String dependentItems) 
{ 
    String[] individualItems = dependentItems.split("\\s+"); 
    ArrayList<Character> dependendentItemsArray; 
    dependendentItemsArray = new ArrayList<Character>(); 


    //put all items into the ArrayList 
    for(int i = 0; i < individualItems.length; i++) 
    { 
     Character c = new Character(individualItems[i].charAt(0)); 
     dependendentItemsArray.add(c); 

    } 

    // insert dependency 
    Character key = new Character(mainItem); 

    ***//NULL POINTER EXCEPTION HERE 
    dependenciesList.put(key, dependendentItemsArray);*** 

} 
} 

我有点perprlexed因为dependenciesList,关键还是dependentItemsArray不是空

回答

3

当你设置的构造HashMap<Character, ArrayList> dependenciesList,比类字段一个不同地图dependenciesList。摆脱它前面的类型标识符。当您在add_direct方法中引用dependenciesList时,这是未初始化的类字段。

您可能想要了解如何在Java中使用块范围作用。在一个块内声明一个新的变量,如一个构造函数,其名称与变量名称相同阴影现有的声明。

您也可能希望在未来遵循Java风格约定,以协助其他需要阅读代码的人员。

3

实际上,dependenciesList null。您在构造函数中初始化的变量:

HashMap<Character, ArrayList> dependenciesList = new HashMap<Character, ArrayList>(); 

仅设置局部变量,该变量在函数结束时被释放。删除领导类型(HashMap<Character, ArrayList>)以使其初始化实例变量。

2

您还没有初始化您的dependenciesList。

做如下修改

public class Dependencies { 
    HashMap<Character, ArrayList> dependenciesList; 


public Dependencies() 
{ 
dependenciesList = new HashMap<Character, ArrayList>(); 
} 
.... 
} 

你正在创造内部构造一个新的HashMap,但你的类变量dependenciesList为空

-1

您未能初始化dependenciesList。请做空检查,然后设置任何值作为最佳实践。

package com.stackoverflow.examples; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

public class Dependencies { 
    public void add_direct(char mainItem, String dependentItems) { 
    String[] individualItems = dependentItems.split("\\s+"); 
    HashMap<Character, ArrayList<Character>> dependenciesList = new HashMap<Character, ArrayList<Character>>(); 
    ArrayList<Character> dependendentItemsArray = new ArrayList<Character>(); 

    // Put all items into the ArrayList 
    for (int i = 0; i < individualItems.length; i++) { 
     Character c = new Character(individualItems[i].charAt(0)); 
     dependendentItemsArray.add(c); 
    } 

    // Insert dependency 
    Character key = new Character(mainItem); 

    // Always check null before put 
    if (dependenciesList != null) 
     dependenciesList.put(key, dependendentItemsArray); 
    System.out.println("dependenciesArray---->" + dependendentItemsArray); 
    System.out.println("dependenciesList---->" + dependenciesList); 

    } 
} 

输出:

dependenciesArray---->[B, C] 
dependenciesList---->{A=[B, C]} 
相关问题