我见过各种线程,其中大多数都在谈论默认值,例如基本类型是用 0 初始化的,而包装器是用 null 初始化的。 我的问题是具体的,只是举例而不是概念。
我的课:
public class Subject {
int subCode;
int marks;
long CGPA;
public Subject(int subCode, int marks, long CGPA) {
this.subCode = subCode;
this.marks = marks;
this.CGPA = CGPA;
}
}
现在这是我在主班的地图:
Map<Integer,List<Subject>> map1 = new HashMap<>();
map1.put(Integer.valueOf(1),new Subject(001,70,29l));
我在29l
中遇到错误,我尝试了类似Long.Valueof(29)
的各种形式,但是它们不起作用。
谁能告诉我一个概念,即何时在类的字段中存在原始类型,然后如何使用构造函数创建类的实例。
注意:我完全知道我应该在这里使用Wrapper类,但是现在我想尝试使用Primer,这只是我的学习。
谢谢。
答案 0 :(得分:5)
这里:
Map<Integer,List<Subject>> map1 = new HashMap<>();
您声明地图的值为:列表。
然后,您尝试添加主题类的单个实例!
map1.put(Integer.valueOf(1),new Subject(001,70,29l));
不能上班!
map1.put(1, Collections.singletonList(new Subject(001,70,29l)));
map1.put(1, Arrays.asList(new Subject(001,70,29l)));
map1.put(1, new ArrayList<>(Arrays.asList(new Subject(001,70,29l))));
应该一切正常。 (注意:我没有通过编译器运行以上命令,因此请忽略愚蠢的错别字等。并且:前两个示例将为您提供不允许的行,允许您从这些列表中添加/删除项目)
您的措辞意味着您的错误观念:列表不是“包装器”。这是一个容器。一个用来放东西的盒子。而且当您说:我的地图将容纳鸡蛋盒时,该地图将需要鸡蛋盒,而不是单个鸡蛋!