Map users = new HashMap();
users.put("John", new User("John", "123"));
users.put("Tom", new User("Tom", "123"));
users.put("Jerry", new User("Jerry", "123"));
users.put("Robin", new User("Robin", "123"));
User u = (User) users.get("John");
System.out.println(u);
倒数第二行为什么要强转User,get后补是本身就是一个User对象吗?
HashMap 的key,value是两个泛型,因此你new出这个对象的话,如果你确定了value值就是一个User对象,你可以把它写死,就像这样
Map<String,User> users = new HashMap<String,User>();
这样编译器就知道了你value是一个User类型,下次它就不用强制类型转换了。
你说本身就是个User对象,那只是你觉得,编译器是不知道的,所以它就会报错。
如果你没指定泛型的具体类型,你可以添加任意Object类型,你可以试一下!!
Map<String,User> users = new HashMap<String,User>();
这样编译器就知道了你value是一个User类型,下次它就不用强制类型转换了。
你说本身就是个User对象,那只是你觉得,编译器是不知道的,所以它就会报错。
如果你没指定泛型的具体类型,你可以添加任意Object类型,你可以试一下!!
温馨提示:答案为网友推荐,仅供参考
第1个回答 2014-08-04
你可以点开后面的源代码看看,其实不是User而是Object对象,所以需要转强转,如果你不想转的话,申明的时候可以这样写:Map<String,User> users = new HashMap<String,User>;追问
为什么会是Object对象呢
追答废话,这是泛型。人家Map又不是对你一个User开发的,所有类都继承自Object,所以用Object才有共通性啊,那我来一个Map怎么办。是不是。