Java派生类HashMap空指针异常求助:无法调用put方法
问题:调用HashMap.put时触发NullPointerException
我正在开发一个项目,包含3个类,其中基类movieEvent无问题。基于该类派生出movieSchedule类后,在main方法中调用派生类的方法时,触发了"main"线程异常,无法调用HashMap的put方法。
派生类代码
import java.util.HashMap; public class movieSchedule extends movieEvent { private HashMap<String, String[]> movieTimes; public movieSchedule() { this.movieTimes = movieTimes; } public void AddMovieSchedule(String name, String[] times) { movieTimes(name, times); } private void movieTimes(String name, String[] times) { movieTimes.put(name, times); } }
main方法相关代码
movieSchedule athensSchedule = new movieSchedule(); String[] guardiansTimes = {"5:30 P.M.", "7:20 P.M.", "9:00 P.M."}; athensSchedule.AddMovieSchedule("Guardians 4", guardiansTimes); String[] airTimes = {"6:30 P.M.", "8:45 P.M.", "9:10 P.M."}; athensSchedule.AddMovieSchedule("AIR", airTimes); String[] marioTimes = {"3:30 P.M.", "4:20 P.M.", "5:00 P.M."}; athensSchedule.AddMovieSchedule("Mario", marioTimes); String[] oppenheimerTimes = {"7:30 P.M.", "9:20 P.M.", "10:00 P.M."}; athensSchedule.AddMovieSchedule("Oppenheimer", oppenheimerTimes); String[] insidiousTimes = {"9:30 P.M.", "10:20 P.M.", "11:00 P.M."}; athensSchedule.AddMovieSchedule("Insidious", insidiousTimes);
报错信息
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.util.HashMap.put(Object, Object)" because "this.movieTimes" is null
问题分析与修复
问题根源
构造函数里的this.movieTimes = movieTimes;完全无效——它只是把未初始化的成员变量赋值给自身,导致movieTimes始终为null,调用put方法时必然触发空指针异常。
修复方案
修改构造函数,正确初始化movieTimes为HashMap实例:
import java.util.HashMap; public class movieSchedule extends movieEvent { private HashMap<String, String[]> movieTimes; public movieSchedule() { // 初始化HashMap实例 this.movieTimes = new HashMap<>(); } public void AddMovieSchedule(String name, String[] times) { movieTimes(name, times); } private void movieTimes(String name, String[] times) { movieTimes.put(name, times); } }
额外优化建议
方法名movieTimes和成员变量同名,容易造成混淆,建议修改方法名为更具语义的名称,比如addMovieTimeEntry,增强代码可读性:
import java.util.HashMap; public class movieSchedule extends movieEvent { private HashMap<String, String[]> movieTimes; public movieSchedule() { this.movieTimes = new HashMap<>(); } public void AddMovieSchedule(String name, String[] times) { addMovieTimeEntry(name, times); } private void addMovieTimeEntry(String name, String[] times) { movieTimes.put(name, times); } }
内容的提问来源于stack exchange,提问作者Aryan Rath
相关产品推荐
相关产品推荐

