+ compareTo(wordtoCompare : Word) : 整数 Java

+ compareTo(wordtoCompare : Word) : Integer Java

目前我正在做一个项目,在这个项目中我必须使用这个 UML 图来创建和附加 class 我明白一切,但我对最后一行感到困惑。

compareTo(wordToCompare : Word) : Integer 

既然 Word 是 class 的名称,我该如何插入参数?我尝试输入一个对象作为参数,但它说:

Object is an incompatible type with Word.

我研究了 Word 是否是非原始数据类型,但找不到任何信息。我相当缺乏经验并且很困惑,如果有人可以提供一些帮助,我将不胜感激。

Word class UML
-wordCharacters : String
-count : integer
+ CONSTRUCTOR (word : String) 
+ getWord() : String 
+ getCount() : Integer 
+ incrementCount() : void 
+ toString() : String 
+ equals(wordtoCompare : Object) : Boolean 
+ compareTo(wordtoCompare : Word) : Integer

@Override
public boolean equals(Object wordtoCompare) {
    boolean flag = false;
    String currentWord = wordtoCompare.getClass().getName();

    this.compareTo(wordtoCompare);

    return flag;
}

public Integer compareTo(Word wordtoCompare) {

    return 0;
}

您可以只创建具有 Word 参数的 compareTo 方法。 (Word 是您当前正在创建的class)

public class Word{
    ....

    public int compareTo(Word wordToCompare){
        int result = 0;
        //do your compare stuff
        return result;
    }

}

如果这不是你的问题,我可能没有正确理解问题

编辑:

您的 equals 方法如下所示:

public boolean equals(Object wordtoCompare) {
    boolean flag = false;
    String currentWord = wordtoCompare.getClass().getName();

    this.compareTo(wordtoCompare);

    return flag;
}

但是您必须确保您正在使用的对象确实是一个词。

@Override
public boolean equals(Object wordtoCompare) {
    boolean flag = false;
    if(wordtoCompare == this) return true;
    if(!(wordtoCompare instanceof Word)) return false;
    Word word = (Word)wordtoCompare;

    int compareResult = this.compareTo(wordtoCompare);
    // Whatever you do with your flag
    return flag;
}

此方法取自Kevin Esche,他正确地实现了此方法。谢谢。

然后你必须正确实施compareTo

我猜是这样的

class Word{
    String wordCharacters;
    int count;
    public Word(String word){
     ...


   }

.. other stuff

public int compareTo(Word other){
   return wordCharacters.compareTo(other.wordCaracters)
}

}

您正在覆盖 equals 方法,它看起来应该有点像这样。 您需要检查 Object wordtoCompare 是否属于 Word 类型或者它是否是当前对象。在检查它是否是 Word 的类型或子类型之后,您可以将 wordtoCompare 转换为实际的 Word 对象并用它做你的事情。

@Override
public boolean equals(Object wordtoCompare) {
    boolean flag = false;
    if(wordtoCompare == this) return true;
    if(!(wordtoCompare instanceof Word)) return false;
    Word word = (Word)wordtoCompare;

    this.compareTo(word);
    // Whatever you do with your flag
    return flag;
}