将对象转换为 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
。
此代码来自 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
。