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

继承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,反序列化时该字段会自动恢复,无需额外手动关联。
  • 子类内部列表的实例初始化
    Man和Woman类中的List<Man>、List<Woman>在添加元素时,要确保每个子实例通过父类构造方法自动初始化了Extension对象,避免列表中的对象调用getExtension返回null。

内容的提问来源于stack exchange,提问作者johnmxc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:20:52