我正在创建一个从磁盘保存和加载对象的系统。我创建了一个Savable
接口,其中包含读取和写入数据的方法,并且可以正常工作。程序中需要保存的任何内容都可以实现此接口,并使用它来保存和读取需要使用的任何数据。问题在于从磁盘读取对象时实际创建对象。现在,我保存了对象的类名,然后在阅读它们时,我使用Class.forName(savedClassName).newInstance();
实例化它们。这个问题是它要求任何Savable
类都有一个无参数的构造函数,但是没有办法在接口本身强制它。因此,如果我或与我一起工作的人试图创建一个Savable对象但忘记包含一个无参数构造函数,那么就会出现例外情况,我们很可能甚至都不会发现它们很长一段时间。我无法解决这个问题,因为似乎没有办法使用接口来要求一种可预测的方法来构造一个对象。
答案 0 :(得分:0)
如果不使用默认构造函数禁用类,如何保存。这样,任何人都会尝试加载的唯一类是已保存的类,因此具有默认构造函数的类。
答案 1 :(得分:0)
您可能会创建一个抽象单元测试来测试默认构造函数的存在(并没有其他任何东西),并从中继承您的单元测试,这可能比您的层次结构中的抽象类更少限制,这应该表明缺少构造函数。