将对象转换为 class 类型

Casting Object to class type

此代码来自 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());
    }
}

因为如果没有转换,您将无法访问 DVDInfo fields/methods。 就像第 5 行中的 d.getTitle()

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

实施 CompareTo 的目的是按标题进行比较。因此该方法需要访问DVDInfo类型的object,但该方法的签名只提供Object o
所以需要显式转换来隐藏[=13] =] 到 DVDInfo d.
如果在实际上不是 DVDInfo 类型的 object 上调用该方法,则会生成 ClassCastException