内部类实例化Serializable

Posted 邱进宝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内部类实例化Serializable相关的知识,希望对你有一定的参考价值。

昨天在做一个java项目的时候,发现下面代码中红色字体那行总是报NotSerializableException,查错误,MyRectangle这个类也明明实现了Serializable接口。

花了大半天,原来发现虽然MyRectangle虽然实现了Serializable接口,但MyRectangle在我的项目中是以内部类的形式定义的,

而内部类不能被序列化!

 对于内部类来说,静态的内部类才可以被序列化,在MyRectangle类定义前加个static,问题就解决了。

以后还是提醒自己,尽量少用内部类,限制太多,以免造成不必要的麻烦。

还是先去查一下内部类和静态内部类的特点联系以及区别吧。

class MySaveListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            if(saveFileName==null)
            {
                jfc=new JFileChooser("d:/");
                jfc.showSaveDialog(null);
                sf=jfc.getSelectedFile();
                saveFileName=sf.getAbsolutePath();
                try {
                    ObjectOutputStream output=new ObjectOutputStream(new FileOutputStream(saveFileName));
                    Iterator e10=vrectangles.iterator();
                    while(e10.hasNext())
                    {
                        MyRectangle rectangle1=(MyRectangle)e10.next();
                        output.writeObject(rectangle1);
                    }
                    output.close();
                } catch (FileNotFoundException e1) {
                    e1.printStackTrace();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            else
            {
                
            }
        }
    }

 

以上是关于内部类实例化Serializable的主要内容,如果未能解决你的问题,请参考以下文章

用java反射实例化私有内部类

如何在静态方法中实例化非静态内部类?

启用 Proguard 后无法实例化片段

类内部实例化自身可行吗?

Spring Boot 测试:无法实例化内部配置类

创建片段而不从 java 代码实例化它