【问题标题】:I'm having problems loading objects from disk in Java我在使用 Java 从磁盘加载对象时遇到问题
【发布时间】:2013-12-07 03:36:49
【问题描述】:

我正在创建一个系统来保存和加载磁盘中的对象。我制作了一个Savable 接口,其中包括读取和写入数据的方法,并且可以正常工作。我的程序中任何需要保存的东西都可以实现这个接口,并用它来保存和读取他们需要处理的任何数据。问题在于从磁盘读取对象时实际创建对象。现在,我保存对象的类名,然后在读取它们时使用Class.forName(savedClassName).newInstance(); 实例化它们。这样做的问题是它要求任何Savable 类都有一个无参数的构造函数,但是没有办法在接口本身中强制它。因此,如果我或与我一起工作的人试图创建一个 Savable 对象但忘记包含一个无参数构造函数,那么接下来就会出现异常,我们很可能很长时间都不会发现它们.我无法解决这个问题,因为似乎没有办法使用接口来要求可预测的方式来构造对象。

【问题讨论】:

  • 您是否尝试过使用抽象类代替(或加上)接口?
  • 有什么理由不使用 Serializable 和 Object 输入/输出流?
  • @Martin:抽象类会非常严格(不允许其他类层次结构)
  • @Martin 我不明白使用抽象类如何解决我的问题。
  • @Ash,这取决于他们真正需要什么。如果他们需要灵活处理层次结构,那么他们将不得不检查另一个解决方案。

标签: java serialization load save instantiation


【解决方案1】:

如何禁止没有默认构造函数的类被保存。这样,任何人都会尝试加载的唯一类是已保存的类,因此具有默认构造函数的类。

【讨论】:

  • 这是一种减少可能造成的损害的好方法,但它仍然不能解决您必须记住每次实现 Savable 时都包含一个无参数构造函数的问题。
【解决方案2】:

您可能会创建一个抽象单元测试来测试默认构造函数的存在(仅此而已)并从中继承您的单元测试,这可能比您层次结构中的抽象类限制更少,这应该表明构造函数丢失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-05
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多