继承Extension类后读取列表返回null,需添加哪些代码修正?
问题解决方案
针对你遇到的Person.getExtension(Person.class)返回null的问题,需要从以下几个方面修正代码:
修正父类拼写与泛型参数
把Person类的继承声明从public abstract class Person extends Exstension implements Serializable改为public abstract class Person extends Extension<Person> implements Serializable:- 首先修正拼写错误
Exstension→Extension; - 给泛型类
Extension指定具体类型参数<Person>,避免原始类型导致的序列化类型信息丢失。
- 首先修正拼写错误
在Person类中持有Extension实例并实现getExtension方法
在Person抽象类中添加Extension字段,并实现对应的获取方法,确保实例关联:public abstract class Person extends Extension<Person> implements Serializable { // 持有Extension实例,确保序列化时能被持久化 private Extension<Person> extension; // 构造方法初始化Extension protected Person() { this.extension = new Extension<>(); } // 实现getExtension方法,返回持有的实例 public Extension<Person> getExtension(Class<Person> clazz) { return this.extension; } }确保Extension的save/load方法正确处理对象
检查Extension.save(ObjectOutputStream oos)和Extension.load(ObjectInputStream ois)的实现:- save方法要将当前Extension实例写入流:
oos.writeObject(this); - load方法读取后要返回正确的泛型实例:
return (Extension<T>) ois.readObject(); - 因为Person的extension字段已实现Serializable,反序列化时该字段会自动恢复,无需额外手动关联。
- save方法要将当前Extension实例写入流:
子类内部列表的实例初始化
Man和Woman类中的List<Man>、List<Woman>在添加元素时,要确保每个子实例通过父类构造方法自动初始化了Extension对象,避免列表中的对象调用getExtension返回null。
内容的提问来源于stack exchange,提问作者johnmxc
相关产品推荐
相关产品推荐

