3

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

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

RandomAccessFile raf = new RandomAccessS3();

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

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

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

谢谢!

4

2 回答 2

4

好吧,您实际上可以在超类上设置名称属性或其他内容。在该类的构造函数中,将传入的 String 的值设置为属于该类的 name 实例变量。

这样,所有派生类在实例化子实例时都必须传入一些东西,并且传递的值被推迟到父类。这样,您可以强制 super() 始终在导数中调用。

于 2014-08-19T01:31:48.187 回答
3

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

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

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

于 2011-06-22T23:48:02.230 回答