执行此强制转换时出现编译错误:
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
,但这并不意味着它们是可互换的。
问题内容: 所以这工作: 但这不是: 总而言之,我得到了第一部分(拳击),但是我发现第二部分不起作用是非常不直观的。是否有特定的原因(除了String从Object继承而int不从Object继承)? 编辑: 为了完善我的问题,这也可以: 但是,以下内容却没有: 令人惊讶的是,您遇到了与String相同的问题: 在最后一行产生类强制转换异常。仍然有效: 问题答案: 我刚刚找到了我正在寻找自己的答案
问题内容: 我实现了以下代码: 当单独编译时,这两行都可以正常编译,但是使用给出运行时错误 。 为什么它们编译良好,但会给出运行时错误? 问题答案: type变量可以像在case类中那样存储对类型或其子类型的对象的引用。 因此,可能会有类似以下的代码: 变量是类型的,因此它只能访问该类的API,而不能访问在类B中添加的方法,即它所指向的对象。但是有时我们希望能够访问那些方法,因此应该可以以某种方式
我一直收到JAXB转换错误。 在这一点上我不确定该纠正什么。 解组: 错误消息: 不能将条目强制转换为javax.xml.bind.JaxbElement 问题更新 @XmlAccessorType(XmlAccessStype.Field)公共类条目{ XML:
MainActivity.java 对不起,我的英语很差。
问题内容: 我有。我想使用获得最大结果。这是我的代码: 这是我的: 现在我得到了。怎么了? 问题答案: 您的错误可能在以下行中: 其中query.list()返回BigInteger列表而不是Long列表。尝试将其更改为。