【发布时间】:2014-03-30 16:21:34
【问题描述】:
我有以下单例类:
public class AuthenticatedUser extends User {
private volatile static AuthenticatedUser instance;
public static AuthenticatedUser getInstance() {
if (instance == null) {
synchronized (AuthenticatedUser.class) {
instance = new AuthenticatedUser();
}
}
return instance;
}
private AuthenticatedUser() {
}
}
我反序列化如下:
Reader reader = new InputStreamReader(entity.getContent());
User user = new Gson().fromJson(reader, User.class);
AuthenticatedUser aus = AuthenticatedUser.getInstance();
aus.setId(user.getId());
aus.setUsername(user.getUsername());
aus.setPassword(user.getPassword());
aus.setEmail(user.getPassword());
aus.setFullName(user.getFullName());
我的问题:如何将其直接反序列化为单例?
【问题讨论】:
-
什么意思?您正在反序列化为单例。
-
好吧,如果我将 User.class 更改为 AuthenticatUser.class 它不会创建实例,如何解决?只需将 instance = this 或 instance = getInstance() 放入私有构造函数中即可?
-
我想你已经偶然发现singletons are evil...的确切原因...
-
好吧,我觉得这讲的有点过头了。好吧,我只需要将 User 实例存储在我的应用程序中,这样我就可以在需要时从多个地方访问它,所以 Singleton 是我找到的唯一选择。将不得不重新考虑这一点。
标签: java json singleton deserialization gson