2013-05-21 42 views
0

我想做一些我从未做过的时髦的东西。如何从Java中的构造函数反序列化对象?

那么什么,我试图做的是: 我通过以下操作

Player playerVar = new Player(1234); 

玩家构造函数,然后将寻找一个球员called 1234创建一个对象,如果它存在,它就会反序列化和存储加载对象'playerVar', if not it'll just follow through and give a'空白'播放器对象。

我不确定是否有可能使当前对象成为同一对象的其他实例,所以我在这里发帖。

这实际上是我想要做的。

this = deserielizedObject 

我知道这都可以通过加载对象,然后手动设置所有必需的变量来完成,但是这是很难理想。我目前我怎么能与自己的另一个实例“替代”的对象,从自身内部

这是代码有

player.java

public class Player implements java.io.Serializable 
    { 
     Player(String GUID) // when loading a new player 
     { 
      Player player = loadPlayer(GUID); 
      //i want to set this to player 
      // something like  this = player  If you know what i mean.... 
     } 
     Player()//when creating a new player 
     { 

     } 

     private Player loadPlayer(String GUID) 
     { 
      File f = new File("data/players/"+GUID+".ser"); 
      if(!f.exists()) 
      { 
       Player player = new Player(); 
       return player; 
      } 
       Player player = null; 
      try 
      { 
       FileInputStream fileIn = new FileInputStream("data/players/"+GUID+".ser"); 
       ObjectInputStream in = new ObjectInputStream(fileIn); 
       player = (Player) in.readObject(); 
       in.close(); 
       fileIn.close(); 
      } 
      catch(IOException i) 
      { 
       i.printStackTrace(); 
       return null; 
      } 
      catch(ClassNotFoundException c) 
      { 
       System.out.println("Cant find Player Class!"); 
       c.printStackTrace(); 
       return null; 
      } 
      return player; 
     } 

     private int guid; 
     private String name; 
     private int bankMoney; 
     ....... 
     ... 
     . 


    } 
+0

您不能分配值'this'在Java ... – BobTheBuilder

回答

2

你可以使用一个工厂类/方法。在你的情况最简单的方法可能是只有loadPlayer作为一个公共静态方法。

public static Player loadPlayer(String GUID) 
    { 
     ... 
     return player; 
    } 

则:

Player playerVar = Player.loadPlayer(1234); 
+0

哦真实....那么简单....对不起,问这么简单的东西浪费时间! :) – Matt

0

你描述什么是不可能的。但是你可以创建一个(静态)工厂方法,而不是构造函数,它可以反序列化或创建一个新实例。

0

您不能将值分配给this,这是不可能的。为什么不直接调用loadPlayer方法:

Player player = Player.loadPlayer(GUID); //having loadPlayer as public static 
相关问题