[英]Casting Object to class type
此代码来自Java SCJP6。 它来自关于集合的第7章中的“可比较接口”的主题。 在第4行中,我们将“对象o”转换为DVDInfo类型。 我不明白 为什么我们将其投射为DVDInfo?
class DVDInfo implements Comparable<DVDInfo>{
public int CompareTo(Object o){
DVDInfo d = (DVDInfo) o ;
return title.compareTo(d.getTitle());
}
}
因为如果没有演员表,您将无法访问DVDInfo
字段/方法。 像第5行中的d.getTitle()
一样。
这是对象和参考的问题。 o
是Object
类的引用,并且是DVDInfo
类的实例。 实例仅在执行时读取,而引用在编译时读取。 如果不将o
DVDInfo
转换为DVDInfo
,则在编译时o
的类型为Object
,因此无法访问其方法,例如getTitle()
。
CompareTo
的此实现的目的是按标题进行比较。 因此,该方法需要访问DVDInfo
类型的DVDInfo
,但是该方法的签名仅提供Object o
。
因此,需要显式转换隐蔽o
到DVDInfo d
。
如果在实际上不是DVDInfo
类型的对象上调用该方法, DVDInfo
ClassCastException
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.