2015-12-07 18 views
0

我正在尝试阅读SocialNetwork Simulation的对象。读取方法使用Java Serializable。代码如下所示:有没有办法让当前类指向刚刚在Java Serializable中读取的新对象?

public class SocialNetwork implements Serializable{ 

// lots of fields 

public SocialNetwork(){ 
//lots of inilization 
} 
    public void writethisObject() throws IOException{ 
      ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("Simulation.bin")); 
      objectOutputStream.writeObject(this); 
     } 

     public void readfromObject(File f) throws IOException, ClassNotFoundException{ 
      ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(f)); 
      SocialNetwork newSocialNetwork = (SocialNetwork) objectInputStream.readObject(); 
      this = newSocialNetwork; 
     } 

} 

但是,你可以看到我试图使目前的阶级观点的对象,我只是通过使该= newSocialNetwork阅读。这给了我一个预期的错误。我可以通过将当前SocialNetwork类的每个字段设置为newSocialNetwork来解决此问题。不过,我不想那么做,因为我班有很多场地。它看起来很乱。我希望你已经知道我在做什么。

回答

2

因为你不能在Java中重载这种行为,你想只有一个类实例使用Singelton Pattern

public class SocialNetwork implements Serializable{ 
    // lots of fields 

    private static SocialNetwork myself = new SocialNetwork(); 

    private SocialNetwork(){ // private constructor 
     //lots of inilization 
    } 

    public static SocialNetwork getInstance() { 
     return myself; 
    } 

    public void writethisObject() throws IOException{...} 

    public void readfromObject(File f) throws IOException, ClassNotFoundException{ 
     ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(f)); 
     myself = (SocialNetwork) objectInputStream.readObject(); 
    } 

} 
+0

感谢您向我介绍这一点。我正在用一种非常不同的方法来解答你的答案。我在自己的回答中发布了这种方法。 –

0

你不能那样做,而是你可以声明一个静态方法。

public static SocialNetwork readfromObject(File f) throws IOException, ClassNotFoundException{ 
      ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(f)); 
      return (SocialNetwork) objectInputStream.readObject(); 

     } 
+0

这不会使我当前的班级等于已返回的SocialNetwork?会吗? –

+0

当前类别不,但是这将返回SocialNetwork – WeMakeSoftware

+0

的一个实例请描述为什么要重新分配'this'? – WeMakeSoftware

0

我们可以使用Singelton模式来实现。 SocialNetwork以外的类将使用SocialNetwork.getInstance()来初始化SocialNetwork。这里是代码

public class SocialNetwork implements Serializable{ 

    // lots of fields 
    private static SocialNetwork myself = null; 


    private SocialNetwork(){ 
    //lots of inilization 
    } 


    public static SocialNetwork getInstance() { 

     if (myself == null){ 
      myself = new SocialNetwork(); 
     } 
     return myself; 
    } 


    public void writethisObject() throws IOException{ 
      ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("Simulation.bin")); 
      objectOutputStream.writeObject(this); 
     } 

     public void readfromObject(File f) throws IOException, ClassNotFoundException{ 
      ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(f)); 
      SocialNetwork newSocialNetwork = (SocialNetwork) objectInputStream.readObject(); 
      myself = newSocialNetwork; 
     } 

} 
相关问题