日期:2014-05-20  浏览次数:20749 次

我的map问题,请教!

假定我有一个方法这么写的
public class TargetStorage{
private static Map<String , Map<String,List<Object>>> recordClassInfo ;
    /***
     * 将一个类的方法按照seq拆分,并存储在recordClassInfo中
     */
public static <T> Map<String,List<Object>>  storageMethodName(Class<T> tClass , String seq){
Class<T> clz = tClass ;
Method[] methods = clz.getDeclaredMethods() ;
Map<String,List<Object>> record = new HashMap<String, List<Object>>();
for(Method method : methods){
String methodName = method.getName();
String[] info_forMethodName = methodName.split(seq);
ArrayList<Object> infoList  = new ArrayList<Object>();
for(String infoPiece : info_forMethodName){
infoList.add(infoPiece);
}
record.put(methodName, infoList);//填充record!
}
recordClassInfo.put(tClass.getName()+"__Method", record);//报错的位置
return recordClassInfo.get(tClass.getName()+"__Method") ;
}
}

然后我写了一个A类调用以上函数
public class A {
private final static Map<String,List<Object>> checkManager ;//检测管理器,存放程序规定的按键类型
static{
checkManager = TargetStorage.storageMethodName(A.class,  "_");
}
public void Ctrl_W(){
}
public void Ctrl_Q(){
}
public static void main(String[] args) {
A a ;
}
}

报错!
报错如下:
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException
at test.TargetStorage.storageMethodName(TargetStorage.java:27)
at test.A.<clinit>(A.java:9)

我自己思考了好久拿不下,特请教CSDN的各位,请教!

------解决方案--------------------
recordClassInfo这个map在哪初始化的?
------解决方案--------------------
你的存储器(Map<String , Map<String,List<Object>>> recordClassInfo)没有初始化,如何存放东西?
------解决方案--------------------
支持楼上两位。
------解决方案--------------------
recordClassInfo?这个map没有初始化,我还研究你逻辑半天
------解决方案--------------------
这句

private static Map<String , Map<String,List<Object>>> recordClassInfo ;


改为
private static Map<String , Map<String,List<Object>>> recordClassInfo=new HashMap<String , Map<String,List<Object>>>() ;