hashmap - 将 HashMap 作为参数传递给子类构造函数
问题描述
当我尝试将 HashMap 传递给构造函数时,我一直在努力找出问题并修复错误。我的情况是:
我有一个学生班:
public class Student {
String name;
String major;
String level;
public Student (String name, String major, String level) {
this.name = name;
this.major = major;
this.level = level;
}
}
我有另一个类,称为 TA_Manager,它是 Student 的子类。这个 TA_Manager 类使用 HashMap 从 Student 类中收集学生(TA):
import java.util.HashMap;
public class TA_Manager extends Student {
HashMap<String, Student> TA;
public TA_Manager(HashMap<String, Student> TA) {
this.TA = TA;
}
}
在主课中,我创建了三个学生对象,并将其中两个学生放入 HashMap(他们是助教)。然后我创建一个 TA_Manager 对象并将 HashMap 传递给 TA_Manager 类:
import java.util.HashMap;
public class Test {
public static void main(String[] args) {
Student s1 = new Student("A", "CS", "Junior");
Student s2 = new Student("B", "IS", "Senior");
Student s3 = new Student("C", "CE", "Senior");
HashMap<String, Student> TA = new HashMap<String, Student>();
TA.put("TA1", s1);
TA.put("TA2", s2);
TA_Manager tamgr = new TA_Manager (TA);
}
}
当我运行主类时,它返回错误:TA_Manager.java:6: 错误:Student 类中的构造函数 Student 不能应用于给定类型;public TA_Manager(HashMap<String, Student> TA) { ^ required: String,String,String found: no arguments
我实际上已经搜索了这个 HashMap 问题,我遵循了关于如何将 HashMap 传递给构造函数的解决方案: Pass a HashMap as parameter in Java 以及如何将类作为 hashmap 值传递的链接: Can HashMap 包含自定义类键/值?
但我仍然收到错误消息。我不知道如何解决这个错误。任何人都可以对此有所了解。非常感谢。
解决方案
错误是因为 java 试图调用 Student 类的无参数构造函数,但你只有一个三参数的公共构造函数。
最简单的解决方案是为您的学生创建一个空的公共构造函数。
public Student(){
//do nothing and leave values as null.
}
这不是一个非常实用的解决方案。这个问题有点概念性。您的 TA 课程是学生,但您没有给它命名专业或级别。
管理它的下一个方法是使用一些值调用当前构造函数。
public TA_Manager(HashMap<String, Student> TA) {
super( null, null, null);
this.TA = TA;
}
现在java知道使用公共构造函数而不是无参数构造函数。我将这些值保留为空,因为我不知道您会有什么默认值。当您在构建过程中不需要包含有用的默认值时,这很实用。
就个人而言,我希望 TA 是一个完整的学生并且有一个 hashmap。
public TA_Manager (String name, String major, String level) {
super(name, major, level);
this.TA = new HashMap<>();
}
在这种情况下,您将创建经理,然后添加所有学生。它的优点是您的 TA_Manager 是一个完全成熟的学生。
推荐阅读
- javascript - I cant look for a value in a object array, it returns me error
- c - 从数组中的前缀媒体中拆分奇数时出错
- java - 如何在 android studio 中使用蓝牙在我的 android 应用程序中的不同屏幕上显示 arduino 多个传感器数据?
- php - 如何将 Drupal 内容中字段的相关数据用作 PHP 脚本中的变量?
- javascript - 如何通过nodejs在html页面添加过滤器(使用mysql数据库中的数据)?
- flutter - Flutter url 启动器无法在发布版本上运行
- maven - 无法使用 Gluon 和 mariadb jdbc 编译 javaFX 项目
- python - 为什么if语句在第一个条件为真时继续
- java - 如何检测安装了另一个特定的应用程序?
- laravel-8 - 尝试在 Windows 上使用 Sail 创建 Laravel 项目时无法输入我的密码