【发布时间】:2013-12-07 03:36:49
【问题描述】:
我正在创建一个系统来保存和加载磁盘中的对象。我制作了一个Savable 接口,其中包括读取和写入数据的方法,并且可以正常工作。我的程序中任何需要保存的东西都可以实现这个接口,并用它来保存和读取他们需要处理的任何数据。问题在于从磁盘读取对象时实际创建对象。现在,我保存对象的类名,然后在读取它们时使用Class.forName(savedClassName).newInstance(); 实例化它们。这样做的问题是它要求任何Savable 类都有一个无参数的构造函数,但是没有办法在接口本身中强制它。因此,如果我或与我一起工作的人试图创建一个 Savable 对象但忘记包含一个无参数构造函数,那么接下来就会出现异常,我们很可能很长时间都不会发现它们.我无法解决这个问题,因为似乎没有办法使用接口来要求可预测的方式来构造对象。
【问题讨论】:
-
您是否尝试过使用抽象类代替(或加上)接口?
-
有什么理由不使用 Serializable 和 Object 输入/输出流?
-
@Martin:抽象类会非常严格(不允许其他类层次结构)
-
@Martin 我不明白使用抽象类如何解决我的问题。
-
@Ash,这取决于他们真正需要什么。如果他们需要灵活处理层次结构,那么他们将不得不检查另一个解决方案。
标签: java serialization load save instantiation