为什么不能将RandomAccessFile强制转换为Inputstream?

执行此强制转换时出现编译错误:

RandomAccessFile raf = new RandomAccessFile(...)

InputStream is = (InputStream)raf;

RandomAccessFile应该被继承,InputStream尽管不能直接继承。

从文档:

RandomAccessFile农具DataInput其中inturn DataInputstreamInputStream

为什么这无效?

也感谢您提供有关使用RandomAccessFileas 的正确方法的意见InputStream

我正在考虑包装方法。

回答:

RandomAccessFile扩展Object,并且

扩展InputStream

如果您想从中获得帮助InputStreamRandomAccessFile我认为实现包装器类是您最简单的选择。幸运的是的唯一抽象方法InputStreamread()

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

回到顶部