泛型,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);//这里爆类型转换错误,请问怎么改
请问怎么修改,为什么会错 展开
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);//这里爆类型转换错误,请问怎么改
请问怎么修改,为什么会错 展开
1个回答
展开全部
您好,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异常的。养成随时初始化的好习惯。
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异常的。养成随时初始化的好习惯。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询