enum MyKeys { AKEY, BKEY, CKEY }
Map <MyKeys, Clazz> zzz = new HashMap<MyKeys, Clazz>();
zzz.put(MyKeys.BKEY, new Clazz());
zzz.get(MyKeys.BKEY).setValues(someValues);
Clazz xxx = zzz.get(MyKeys.BKEY);//returns null
然而,这个简单的更改使其返回正确的值:
enum MyKeys { AKEY, BKEY, CKEY }
Map <String, Clazz> zzz = new HashMap<String, Clazz>();
zzz.put(MyKeys.BKEY, new Clazz());
zzz.get(MyKeys.BKEY).setValues(someValues);
Clazz xxx = zzz.get(MyKeys.BKEY.toString());//doesn't returns null
为什么?
Map <MyKeys, Clazz> zzz = new HashMap<MyKeys, String>();
// this means it won't return null, the value is initialized
zzz.put(MyKeys.BKEY, new Clazz());
// this is confusing part ... somevalues might be null
zzz.get(MyKeys.BKEY).setValues(someValues);
Clazz xxx = zzz.get(MyKeys.BKEY); //definitely won't return null
你确定是hashmap返回null,而不是放入hashmap的clazz的getValues((的结果吗。
如果你在其他地方有错误,请在基于web的编译器中尝试以下操作:
import java.util.HashMap;
import java.util.Map;
public class HelloWorld{
public static class Clazz {
public String val;
public void setValues(String someValues){
val=someValues;
}
}
public enum MyKeys { AKEY, BKEY, CKEY; }
public static void main(String[] args ){
Map<MyKeys, Clazz> zzz = new HashMap<MyKeys, Clazz>();
// this means it won't return null, the value is initialized
zzz.put(MyKeys.BKEY, new Clazz());
// this is confusing part ... somevalues might be null
zzz.get(MyKeys.BKEY).setValues("someValues");
Clazz xxx = zzz.get(MyKeys.BKEY);
System.out.println(xxx.val);
}
}
如果使用,您将获得正确的值
String xxx = zzz.get(MyKeys.BKEY);
因此,在方法参数中使用BKEY之前,实际上需要将其声明为MyKeys的枚举。
我使用过java的EnumMap
参见此示例:
public enum Colors{
BLUE, YELLOW, BROWN, RED;
}
然后启动EnumMap
// initialization
EnumMap<Colors, String> stateMap = new EnumMap<Colors, String>(Colors.class);
享受吧!