当前位置: 首页 > 面试题库 >

如何处理Singleton和序列化

彭令秋
2023-03-14
问题内容

考虑我有一个Singleton类,定义如下。

public class MySingleton implements Serializable{
 private static MySingleton myInstance;

 private MySingleton(){

 }
  static{
    myInstance =new MySingleton();
 }
 public static MySingleton getInstance(){
    return MySingleton.myInstance;
 }
}

根据我的上述定义满足了Singleton的要求。添加的唯一额外行为是该类实现了可序列化的接口。

如果另一个类X获得了单例的实例并将其写入文件,然后在以后将其反序列化以获取另一个实例,则将有两个实例违反了Singleton原理。

我该如何避免这种情况,或者我在上述定义本身中错了。


问题答案:

最好的方法是使用枚举单例模式:

public enum MySingleton {
  INSTANCE;
}

这样可以保证对象的单例性,并以始终获得相同实例的方式为您提供可序列化性。

更一般地,您可以提供如下readResolve()方法:

protected Object readResolve() {
  return myInstance;
}


 类似资料:
  • 问题内容: 我有一个像这样的课程: 我想序列化它们的列表: 当我进行序列化时,动物属性的类型信息将丢失。有没有一种方法可以某种方式安装解析器侦听器,以便在遇到列表中的每个元素时提供正确的类进行反序列化?这就是手动提供描述类类型的字符串的想法。 谢谢 问题答案: Gson项目代码库中的RuntimeTypeAdapter据说可以很好地用于多态序列化和反序列化。我认为我尚未尝试使用它。有关更多信息,请

  • 我在Spring Kafka设置中使用Avro和模式注册表。 我想以某种方式处理,它可能在反序列化过程中引发。 我找到了以下两个资源: https://github.com/spring-projects/spring-kafka/issues/164 有人知道如何在Spring Boot中捕获吗? 我使用的是Spring Boot 2.0.2 编辑:我找到了解决办法。

  • 如何在批处理模式的情况下处理反序列化异常? 我正在使用Spring boot-2.3.8版本的Spring kafka。 尝试过此选项: 但它抛出了一个异常:由java引起。lang.IllegalStateException:错误处理程序必须是ErrorHandler,而不是org。springframework。Kafka。听众。请参阅OcuCurrentBatchErrorHandler 以

  • 问题内容: 我有一个Vendor对象,可以从一个单独的“ vendor” json序列中反序列化,但是我想将此序列反序列化为一个,我只是想不出如何让Jackson合作。有小费吗? 问题答案: 您的数据存在问题,因为您的数组中有内部 包装 对象。想必你的对象被设计成手柄,,,但每次的多个对象也都包裹在一个对象与单一属性。 我假设您正在使用Jackson 数据绑定 模型。 如果是这样,那么有两件事要考

  • 填充序列pad_sequences keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype='int32', padding='pre', truncating='pre', value=0.) 将长为nb_samples的序列(标量序列)转化为形如(nb_samples,nb_timesteps)

  • 填充序列pad_sequences keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype='int32',padding='pre', truncating='pre', value=0) 将长为nb_samples的序列(标量序列)转化为形如(nb_samples,nb_timesteps)2D num