2013-11-22 145 views
2

我正在创建一个系统来保存和加载磁盘中的对象。我制作了一个包含读取和写入数据的方法的接口,该接口可以正常工作。我的程序中的任何需要保存的内容都可以实现此接口,并使用它来保存和读取需要使用的任何数据。问题在于在从磁盘读取对象时实际创建对象。现在,我保存对象的类名,然后在阅读它们时使用Class.forName(savedClassName).newInstance();实例化它们。这个问题需要任何Savable类有一个无参数的构造函数,但没有办法强制在接口本身。所以如果我或者和我一起工作的人尝试创建一个Savable对象,但忘记包含一个无参数的构造函数,那么将会有一些例外的方式,我们很可能甚至不会在很长时间内发现它们。我无法解决这个问题,因为似乎没有办法使用接口来要求可预测的方法来构造一个对象。我在从Java磁盘加载对象时遇到问题

+0

您是否尝试过使用抽象类来代替(或加上)接口? – Martin

+1

为什么你没有使用Serializable和Object输入/输出流? – Ash

+0

@Martin:抽象类将是相当严格的(没有其他类层次允许) – Ash

回答

0

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

+1

这是减少可能的损害的好方法,但它仍然不能解决您必须记住每次实施Savable时都要包含无参数构造函数的问题。 – ChemicalRocketeer

0

您可能会创建一个抽象单元测试,测试默认构造函数(而不是其他)的存在并继承您的单元测试,这可能比您的层次结构中的抽象类限制性更少,并且应该指示构造函数丢失。