泛型,HashMap,爆类型转换错误 30

packagejihekuangjia;importjava.util.HashMap;importjava.util.Map;importjava.util.Scann... package jihekuangjia;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class test2 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner inport=new Scanner(System.in);
STRUDENT student=new STRUDENT();
Map stu=new HashMap();
int a;
do{
System.out.println("请输入学生姓名:");
student.name=inport.next();
System.out.println("请输入学生成绩:");
student.result=inport.nextInt();
stu.put(student.name,student.result);
System.out.println("输入1则继续添加学生");
a=inport.nextInt();
}while(a==1);
System.out.println("+++++++++++++");
for(Object key:stu.keySet()){
STRUDENT studen=(STRUDENT) stu.get(key);//这里爆类型转换错误,请问怎么改
System.out.println(key.toString()+"的成绩是:"+studen.result);
}
}

}
package jihekuangjia;

public class STRUDENT {
public String name;
public int result;
}
STRUDENT studen=(STRUDENT) stu.get(key);//这里爆类型转换错误,请问怎么改

请问怎么修改,为什么会错
展开
 我来答
山水阿锐
2015-05-05 · TA获得超过34.3万个赞
知道顶级答主
回答量:23.7万
采纳率:91%
帮助的人:3.2亿
展开全部
您好,HashMap[] aTweightList = new HashMap[10];
aTweightList[1] = new HashMap<String, Float>();
分析:(同样摘自该帖子,解释的还可以,除了编译器不承认HashMap<K,V>[]这种形式是错的外,都没什么问题,事实上,便一起时承认这种写法的,但是基本上你不能使用这么定义的任何一个变量。)
1) 泛型是没有数组的。编译器不承认 HashMap<K,V>[]这种形式的:
Cannot create a generic array of HashMap<k,v>
原因就是数组必须确定他每一个元素的类型。但是泛型在编译阶段有一个类型擦除的问题,也就是说编译器理解 HashMap<Integer,Integer>和HashMap<String,String>都是同一种类型 HashMap。如果泛型数组存在,那么HashMap<Integer,Integer>和 HashMap<String,String>对象都可以加入到同一个HashMap[]数组中,这会造成灾难性的结果。
详细原因可以看这篇博客 http://hxraid.javaeye.com/blog/549509
如果一定要定义HashMap数组,可以使用HashMap[] aTweightList = new HashMap[10]; 形式,也就是HashMap常规类型。
(2) 对于没有初始化的类对象,系统会给予一个null值。但是调用null对象,一定会报NullPointerException异常的。养成随时初始化的好习惯。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式