內部類實例化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
            {
                
            }
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM