java对象类型强制转换问题

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类型,你可以试一下!!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-04
你可以点开后面的源代码看看,其实不是User而是Object对象,所以需要转强转,如果你不想转的话,申明的时候可以这样写:Map<String,User> users = new HashMap<String,User>;追问

为什么会是Object对象呢

追答

废话,这是泛型。人家Map又不是对你一个User开发的,所有类都继承自Object,所以用Object才有共通性啊,那我来一个Map怎么办。是不是。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网