2016-01-21 24 views
0

我想將socket.getSocket()socketStatus.getSocketStatus()存儲在HashMap中。但hMap.put(socket.getSocket(),socketStatus.getSocketStatus());會拋出一個NullPointerException。我該如何解決這個問題?將兩個枚舉值存儲在HashMap中

下面是我的兩個類:

SocketInfoMap.java

package vd.socket.map; 

import java.util.HashMap; 
import java.util.Map; 

public class SocketInfoMap { 

    public enum Socket { 

     ONE("01"), TWO("02"), THREE("03"), FOUR("04"), FIVE("05"), SIX("06"), SEVEN("07"), EIGHT("08"); 

     private static Map<Socket, String> sMap = new HashMap<Socket, String>(); 
     private String socket; 

     private Socket(String socket) { 
      this.socket = socket; 
     } 

     public String getSocket() { 
      return socket; 
     } 

     static { 
      for (Socket socket : Socket.values()) { 
       sMap.put(socket, socket.getSocket()); 
      } 

     } 
    } 

    public enum SocketStatus { 

     LIFTED(1), NOT_LIFTED(0); 

     private static Map<SocketStatus, Integer> stMap = new HashMap<SocketStatus, Integer>(); 
     private int socketStatus; 

     private SocketStatus(int socketStatus) { 
      this.socketStatus = socketStatus; 
     } 

     public int getSocketStatus() { 
      return socketStatus; 
     } 

     static { 
      for (SocketStatus socketStatus : SocketStatus.values()) { 
       stMap.put(socketStatus, socketStatus.getSocketStatus()); 
      } 

     } 
    } 

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

    public SocketInfoMap(Map<String, Integer> hMap) { 
     SocketInfoMap.hMap = hMap; 
    } 

    public Map<String, Integer> gethMap() { 
     return hMap; 
    } 

} 

SocketMapTest.java

package vd.socket.map; 

import java.util.Map; 
import vd.socket.map.SocketInfoMap.*; 

public class SocketMapTest { 
    private static Map<String, Integer> hMap; 

    public static void main(String[] args) { 

     SocketStatus socketStatus = SocketStatus.LIFTED; 
     Socket socket = Socket.TWO; 

     if ((socket == Socket.TWO) && (socketStatus == SocketStatus.LIFTED)) { 
      hMap.put(socket.getSocket(), socketStatus.getSocketStatus()); 
      System.out.println(hMap); 
     } else 
      hMap.put(socket.getSocket(), socketStatus.getSocketStatus()); 
     System.out.println(hMap); 

    } 
} 
+1

它看起來並不像你初始化'hMap'在'main',比如'HMAP =新地圖<字符串,Integer>的()'。你是否在使用IDE,比如Eclipse?如果不是,你應該通過這樣的瑣碎錯誤來幫助你。 –

+1

順便說一句,'System.out.println(hMap)'不會輸出'Map'的內容,它會輸出*內存位置*,你應該Google如何輸出一個集合的內容。 –

+1

謝謝Jonny Henly –

回答