我正在编辑一个使用RandomAccessFile对象的程序,并且我想提出自己的RandomAccessFile类,该类使用不同于文件对象的其他数据源(这是Amazon webservices S3对象,但这无关紧要)

我基本上想创建一个名为RandomAccessS3的类,该类具有RandomAccessFile作为其超类,所以我可以简单地说

RandomAccessFile raf =新的RandomAccessS3();

因此,保持现有代码不变。我将简单地覆盖RandomAccessFile中的每个方法。

问题是,在子类RandomAccessS3的构造函数中,我被迫使用super(file,mode)调用RandomAccessFile的构造函数,super(file,mode)以文件名作为参数,并抛出错误并在文件无效时死亡。

我不能用try / catch块包围super()调用,因为必须将super作为构造函数中的第一行。我可以提供一个虚拟文件,但是我不想强迫用户这样做。有什么简单的方法可以解决这个问题吗?

谢谢!

最佳答案

解决这个问题没有简单的方法。在那里,构造函数可确保实例处于良好/有效状态,RandomAccessFile合同的一部分内容是,实例链接到有效文件。

作为一个巨大的技巧,我想您可以创建一个临时文件,只是为了满足RandomAccessFile构造函数。

更好的方法可能是创建一个新接口,并将您的引用从RandomAccessFile更新到新接口。然后,两次实现该接口,一次使用RandomAccessFile,一次通过S3调用。

关于java - 子类的Java解决方法被迫在构造函数中调用super()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6447796/

10-09 23:31