我正在尝试做一些我从未做过的时髦的事情。
所以我想做的是: 我通过执行以下操作来创建对象
Player playerVar = new Player(1234);
然后玩家构造函数会找到一个玩家called 1234
,如果它存在,它将反序列化并将加载的对象存储在'playerVar
', if not it'll just follow through and give a
'blank'`玩家对象下。< / p>
我不确定它是否可能使当前对象成为同一对象的另一个实例,所以我在这里发帖。
这基本上就是我想要做的。
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 :(得分:2)
您可以使用工厂类/方法。在您的情况下,最简单的方法可能是将loadPlayer
作为公共静态方法。
public static Player loadPlayer(String GUID)
{
...
return player;
}
然后:
Player playerVar = Player.loadPlayer(1234);
答案 1 :(得分:0)
您描述的内容是不可能的。但是你可以创建一个(静态)工厂方法而不是构造函数,它可以反序列化或创建一个新实例。
答案 2 :(得分:0)
您无法为this
分配值,这是不可能的。为什么不直接调用loadPlayer
方法:
Player player = Player.loadPlayer(GUID); //having loadPlayer as public static