将对象转换为类类型

时间:2015-03-30 15:00:34

标签: java arraylist collections casting

此代码来自Java SCJP6。它来自第7章关于集合的可比接口的主题。 在第4行中,我们将'Object o'转换为DVDInfo类型。我不明白这一点。我们为什么要把它投射到DVDInfo?

class DVDInfo implements Comparable<DVDInfo>{
    public int CompareTo(Object o){
        DVDInfo d = (DVDInfo) o ;
        return title.compareTo(d.getTitle());
    }
}

3 个答案:

答案 0 :(得分:2)

因为没有演员阵容,您将无法访问DVDInfo字段/方法。 与第5行中的d.getTitle()一样。

答案 1 :(得分:0)

这是一个对象和参考问题。 o是类Object的引用,它是类DVDInfo的一个实例。实例仅在执行时读取,而引用在编译时读取。 如果您未将o投射到DVDInfo,那么在编译时o类型为Object,因此您无法访问其方法,例如getTitle()

答案 2 :(得分:0)

CompareTo的此实现的目的是按标题进行比较。因此,该方法需要访问DVDInfo类型的对象,但该方法的签名仅提供Object o。因此需要显式转换以将o转换为{{1}如果在一个实际上不是DVDInfo d类型的对象上调用该方法,则将DVDInfo被移植。