我正在编辑一个使用RandomAccessFile对象的程序,我想提出我自己的RandomAccessFile类,它使用不同于文件对象的数据源(它是一个Amazon webservices S3对象,但这是无关紧要的)
我想基本上创建一个名为RandomAccessS3的类,它将RandomAccessFile作为其超类,所以我可以简单地说
RandomAccessFile raf = new RandomAccessS3();
因此保持现有代码相同。我将简单地覆盖RandomAccessFile中的每个方法。
问题是在子类RandomAccessS3的构造函数中,我被迫使用super(文件,模式)调用RandomAccessFile的构造函数,该函数将参数作为文件名,并抛出错误并在文件无效时死亡。
我无法使用try / catch块包围super()调用,因为super需要是构造函数中的第一行。我可以提供一个虚拟文件,但我不想强迫用户这样做。这有什么简单的方法吗?
谢谢!
答案 0 :(得分:4)
好吧,你实际上可以在超类上设置一个名称属性。在该类的构造函数中,将传入的String的值设置为属于该类的名称实例变量。
这样,所有派生类必须在实例化子实例时传入某些内容,并且传递的值将延迟到父类。这样你可以强制super()总是被衍生物调用。
答案 1 :(得分:3)
这没有简单的方法。构造函数用于确保实例处于良好/有效状态,而RandomAccessFile的部分契约是实例链接到有效文件。
作为一个巨大的黑客,我想你可以创建一个临时文件,只是为了满足RandomAccessFile构造函数。
更好的方法可能是创建一个新接口并将RandomAccessFile的引用更新到新接口。然后,实现接口两次,一次使用RandomAccessFile,一次使用S3调用。