基本上,我尝试编写一个基于compareByWord的值进行比较的compareTo。如果compareByWord为真,我希望它基于单词进行比较,但如果它为假,我希望它基于count进行比较。
class WordCount implements Comparable //Error saying WordCount must implement the inherited abstract method Comparable.compareto (Object)
{
String word;
int count;
static boolean compareByWord;
public WordCount(String aWord)
{
setWord(aWord);
count = 1;
}
private void setWord(String theWord)
{
word=theWord;
}
public void increment()
{
count+=1;
}
public static void sortByWord()
{
compareByWord = true;
}
public static void sortByCount()
{
compareByWord = false;
}
public String toString()
{
String result = String.format("%s (%d)",word, count);
return result;
}
public String getWord()
{
return word;
}
public int getCount()
{
return count;
}
@Override
public int compareTo(WordCount other) { //Error saying compareTo (WordCount) of type WordCount must override or implement a supertype method.
if (compareByWord == true)
{
return word.compareTo(other.getWord());
}
if (compareByWord == false)
{
return count.compareTo(other.getCount()); //Error saying it cannot invoke compareTo int on primitive type int.
}
return 0;
}
}在我尝试实现它之前,我的类是完美的,不知道我在哪里出错了。任何帮助都是非常感谢的。
发布于 2014-04-17 03:05:22
将声明更改为
class WordCount implements Comparable<WordCount> { // generic versionComparable<WordCount>中的方法签名是compareTo(WordCount obj),而原始版本中的方法签名是compareTo(Object obj)。
通过使用@Override,编译器确保您实际上重写了父方法。问题是compareTo(WordCount obj)不会覆盖compareTo(Object obj)。
发布于 2014-04-17 03:06:11
使用Integer count而不是int count。Integer是实现可比较的对象,而int是错误消息所描述的原语。对于javadoc:
public final class Integer
extends Number
implements Comparable<Integer>当然,也要确保将访问器方法更改为使用Integer。
这将解决您的最后一个错误。
发布于 2014-04-17 03:08:43
must implement the inherited abstract method Comparable.compareto (Object)所以传递Object,而不是WordCount。现在,您正在尝试重载此函数,而不是重载。
https://stackoverflow.com/questions/23118013
复制相似问题