繁体   English   中英

子类的Java解决方法被强制在构造函数中调用super()?

[英]Java workaround for subclass forced to call super() in constructor?

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

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

RandomAccessFile raf = new RandomAccessS3();

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

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

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

谢谢!

好吧,你实际上可以在超类上设置一个名称属性。 在该类的构造函数中,将传入的String的值设置为属于该类的名称实例变量。

这样,所有派生类必须在实例化子实例时传入某些内容,并且传递的值将延迟到父类。 这样你可以强制super()总是被衍生物调​​用。

这没有简单的方法。 构造函数用于确保实例处于良好/有效状态,而RandomAccessFile的部分契约是实例链接到有效文件。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM