2013-05-21 47 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 
相關問題