此代码来自着名的Java SCJP6书籍。我无法理解title
方法中d.getTitle()
和compareTo
之间的区别。 title
和d.getTitle()
如何获取和比较值?
class DVDInfo implements Comparable<DVDInfo> {
String title;
String genre;
String leadActor;
DVDInfo(String t, String g, String a) {
title = t; genre = g; leadActor = a;
}
public String toString() {
return title + " " + genre + " " + leadActor + "\n";
}
public int compareTo(DVDInfo d) {
return title.compareTo(d.getTitle());
}
public String getTitle() {
return title;
}
// other getters and setters
}
答案 0 :(得分:0)
在compareTo()
方法中,有两个实例进行了比较。当你从外面使用它时,它看起来像这样:
DVDInfo first = new DVDInfo("title1");
DVDInfo second = new DVDInfo("title2");
// compare
first.copareTo(second);
您可以在“第一个”DVDInfo实例范围中看到compareTo()
方法。
在您的班级中实施compareTo()
时,您将获得“第二个”实例作为参数:
public int compareTo(DVDInfo other) {
// 'title' is the local field (this.title)
// 'other.getTitle()' is the title from the 'other' (second) instance
return title.compareTo(other.getTitle());
}
答案 1 :(得分:0)
您显示的compareTo()
方法通过比较两个对象的标题来比较这两个对象。也就是说,它按照标题订购DVD。一张标题为&#34;纽约纽约&#34;无论DVDInfo对象中的所有其他字段如何,都会出现在标题为“Tiffany&#34;早餐”的DVD之后。
因此,compareTo()
依赖compareTo()
字段的title
方法,String
字段是String
类型的对象。 Comparable
实现compareTo()
,因此有getTitle()
方法按字典顺序排列字符串。
返回的结果是将当前对象的标题与给定对象的标题进行比较。在我看来,比较应该是双方的getTitle()
(假设title
将被覆盖并考虑到这一点)或双方的getTitle()
(参加如果有人覆盖compareTo()
,他们也应该覆盖compareTo()
)。但这可能是意见/风格问题。但最重要的是,这两个字符串都是字符串,这些字符串代表DVD的标题,并且这些字符串相互比较以产生从{{1返回的正值,零值或负值。 } DVDInfo
。
取两个DVDInfo类型的对象:
DVDInfo dvd1 = new DVDInfo( "Titanic", "Drama", "Leonardo DiCaprio");
DVDInfo dvd2 = new DVDInfo( "Guardians Of The Galaxy", "Adventure", "Chris Pratt" );
现在,如果你运行
int result = dvd1.compareTo(dvd2);
&#34;当前&#34;对象(运行该方法的对象)是dvd1
。它的title
字段包含字符串&#34; Titanic&#34;。参数d
是对dvd2
引用的对象的引用。所以它的标题是&#34;银河守护者&#34;,以及方法d.getTitle()
返回的内容。现在它比较这两个字符串,比较等同于:
"Titanic".compareTo("Guardians Of The Galaxy")
返回13(正数,显示&#34;泰坦尼克号&#34;大于&#34;银河守护者&#34;)。