我必须创建一个二进制搜索树,它以WordCount
对象作为键,以及将该字添加到BST作为值的次数。在我的代码中,我有类:
public class WordCountMap<WordCount, V> {
private TreeNode root;
private WordCount wordItem;
/**
* This is the node class
*/
private class TreeNode {
private WordCount item;
private V count;
private TreeNode left;
private TreeNode right;
TreeNode(WordCount item, V count, TreeNode left, TreeNode right) {
this.left = left;
this.right = right;
this.item = item;
}
}
public WordCountMap() {
//Create a new WordCountMap
}
/**
* Adds 1 to the existing count for a word, or adds word to the WordCountMap
* with a count of 1 if it was not already present.
*/
public void incrementCount(String word) {
wordItem = new WordCount(word);
if (root == null) {
root = new TreeNode(wordItem, wordItem.getCount(), null, null);
}
//more code below
}
}
当我尝试编译代码时,我收到错误:
WordCount extends Object declared in class WordCountMap
我尝试了@SuppressWarnings("rawtypes")
,但仍然导致了同样的错误。
答案 0 :(得分:4)
看起来你没有正确使用泛型。
想象一下,您用WordCount
替换了T
的所有实例(无论哪种方式都是相同的程序)。在incrementCount()
中,您有一行wordItem = new T(word);
,但这没有意义,因为您不知道T
是否具有带String参数的构造函数。
由于看起来您总是希望密钥属于WordCount
类型,因此您可能需要按如下方式声明该类。
public class WordCountMap<V> {}
但是你想要计数的类型是任何对象吗?计数类型可以是String,Stack还是InputStream?你可以在更安全的一面宣布课程为。 。 。
public class WordCountMap<V extends Number> {}
但即便如此,为什么你希望伯爵是通用的呢?你打算让这堂课由另一堂课延长吗?是否有任何理由计数类型不能只是int或long?我会删除所有泛型,只使用一些原始数字类型进行计数
public class WordCountMap {
...
private class TreeNode {
...
private int count;
}
}