为什么不能将RandomAccessFile强制转换为Inputstream?
执行此强制转换时出现编译错误:
RandomAccessFile raf = new RandomAccessFile(...)InputStream is = (InputStream)raf;
RandomAccessFile应该被继承,InputStream尽管不能直接继承。
从文档:
RandomAccessFile农具DataInput其中inturn DataInputstream&InputStream
为什么这无效?
也感谢您提供有关使用RandomAccessFileas 的正确方法的意见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
