You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从其他类调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:09:02