为什么不能将RandomAccessFile强制转换为Inputstream?
执行此强制转换时出现编译错误:
RandomAccessFile raf = new RandomAccessFile(...)InputStream is = (InputStream)raf;
RandomAccessFile
应该被继承,InputStream
尽管不能直接继承。
从文档:
RandomAccessFile
农具DataInput
其中inturn DataInputstream
&InputStream
为什么这无效?
也感谢您提供有关使用RandomAccessFile
as 的正确方法的意见InputStream
?
我正在考虑包装方法。
回答:
RandomAccessFile
扩展Object
,并且
不 扩展InputStream
。
如果您想从中获得帮助InputStream
,RandomAccessFile
我认为实现包装器类是您最简单的选择。幸运的是的唯一抽象方法InputStream
是read()
。
RandomAccessFile实现了DataInput,该数据输入将依次转为DataInputstream和InputStream
DataInputStream
是的子类InputStream
,它也恰好实现DataInput
。继承和接口实现树如下所示:
InputStream DataInput \ / \
\ / \
\ / \
DataInputStream RandomAccessFile
您可以在DataInputStream
任何可以使用InputStream
或的地方使用DataInput
。您可以在RandomAccessFile
任何可以使用的地方使用DataInput
。
但是您不能使用强制转换在这样的继承层次结构中上下浮动。特别是,将一个类强制转换为子类(或实现的接口)将引发,ClassCastException
除非该对象恰好是子类的实例。
即使两个类都发生扩展Object
,但这并不意味着它们是可互换的。
以上是 为什么不能将RandomAccessFile强制转换为Inputstream? 的全部内容, 来源链接: utcz.com/qa/420867.html