如何从其他类调用HashMap方法?调用Assessment类addMark报错求助
问题分析与解决方案
看起来你遇到的核心问题是方法调用方式不匹配——你用了静态调用的方式(类名.方法名),但你的addMark方法大概率是实例方法(没有static修饰),这就会导致编译错误。下面给你拆解问题和解决办法:
最可能的原因:实例方法被静态调用
先看你的Assessment类里的addMark定义,如果它是这样的(没有static关键字):
public class Assessment { private HashMap<String, Mark> marks = new HashMap<>(); // 这是实例方法,属于Assessment的对象,不是类本身 public void addMark(String studentId, Mark mark) { marks.put(studentId, mark); } }
那你直接用Assessment.addMark("11", m1);肯定会报错——实例方法必须通过类的实例对象来调用,不能直接用类名调用。
两种可行的解决方案
方案1:把addMark改成静态方法(适合共享成绩数据的场景)
如果你的marks HashMap是用来存储所有学生的通用成绩(属于整个Assessment类共享),那可以把方法和HashMap都改成静态的:
public class Assessment { // 静态HashMap,属于类本身,所有实例共享 private static HashMap<String, Mark> marks = new HashMap<>(); // 静态方法,直接用类名调用 public static void addMark(String studentId, Mark mark) { marks.put(studentId, mark); } }
这样你原来Student类里的调用代码Assessment.addMark("11", m1);就可以正常运行了。
方案2:创建Assessment实例后再调用方法(适合每个Assessment有独立成绩集合的场景)
如果marks是每个Assessment实例独有的数据(比如不同的考试有不同的成绩表),那你需要先创建Assessment的对象,再调用实例方法:
public class Student { public void createStudents() { Mark m1 = new Mark(30, "Bad"); // 先创建Assessment的实例对象 Assessment mathAssessment = new Assessment(); // 通过实例对象调用addMark mathAssessment.addMark("11", m1); } }
对应的Assessment类保持实例方法的定义即可:
public class Assessment { // 实例HashMap,每个Assessment对象有自己的一份 private HashMap<String, Mark> marks = new HashMap<>(); public void addMark(String studentId, Mark mark) { marks.put(studentId, mark); } }
额外需要检查的点
- 确认
Assessment类和Student类在同一个包下,或者已经通过import语句导入了Assessment类; - 检查
addMark方法的参数类型是否和你传入的"11"(String类型)、m1(Mark类型)完全匹配,避免参数类型不兼容的错误。
内容的提问来源于stack exchange,提问作者Hal
相关产品推荐
相关产品推荐

