public class Table<Key extends Comparable<Key>, Value> {
/*
* The purpose of entry is to glue together a key and a value
*
* The class that we use for Key has to implement comparable
* */
private class Entry<Key extends Comparable<Key>, Value> implements Comparable<Entry>
{
Key key;
Value value;
public Entry(Key k, Value v)
{
key = k;
value = v;
}
public int compareTo(Entry<Key,Value> entry)
{
return key.compareTo(entry.key);
}
}
private BST<Table.Entry<Key, Value>> tree = new BST<Table.Entry<Key, Value>>();
//must supply public methods for the three operations
public Value lookUp(Key key)
{
Entry<Key, Value> e = new Entry<Key, Value>(key, null);
return tree.search(e).value;
}
public boolean insert(Key k, Value v)
{
return tree.insert(new Entry<Key, Value>(k, v));
}
public boolean delete(Key k)
{
//we haven't written a delete method for bst yet.
return tree.delete(new Entry(k, null));
}
}
以上是我的教授在课堂上讨论的表抽象数据类型的类声明。我一直试图弄清楚为什么Java会给我以下错误信息
在原始类型
上给出的类型参数
当我在这里声明我的变量时
private BST<Table.Entry<Key, Value>> tree = new BST<Table.Entry<Key, Value>>();
java中的原始类型是什么?我们讨论过编写泛型类。它与此有关吗?
答案 0 :(得分:4)
您的表类需要通用参数,但您在此处将其作为原始类型引用:
私人BST&lt; 表 .Entry&gt; tree = new BST&lt; 表 .Entry&gt;();
您需要为其提供通用参数,如下所示:
private BST<Table<Key, Value>.Entry<Key, Value>> tree =
new BST<Table<Key, Value>.Entry<Key, Value>>();
正如其他人所指出的,它的标准是将通用参数定义为一个字母字符,因此K
代替Key
,而V
代替Value
。它使 基本 更容易阅读和理解您的代码,并有助于避免与真实的类型名称混淆。
答案 1 :(得分:0)
Entry
是原始类型,而Entry<Key, Value>
则不是。 o,在您的代码中,代码段:
public boolean delete(Key k)
{
//we haven't written a delete method for bst yet.
return tree.delete(new Entry(k, null));
}
包含原始类型。