java - 为什么 java 在我的变量声明中提示原始类型?

标签 java data-structures

<分区>

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 会给我以下错误消息

Type arguments given on raw type

当我在这里声明我的变量时

private BST<Table.Entry<Key, Value>> tree = new BST<Table.Entry<Key, Value>>();

Java 中的原始类型是什么?我们已经讨论了编写泛型类。跟那个有关系吗?

最佳答案

您的表类需要通用参数,但您在此处将其作为原始类型引用:

private BST<Table.Entry> tree = new BST<Table.Entry>();

您需要为其提供通用参数,如下所示:

private BST<Table<Key, Value>.Entry<Key, Value>> tree = 
    new BST<Table<Key, Value>.Entry<Key, Value>>();

正如其他人指出的那样,它的标准是将泛型参数定义为一个字母字符,因此 K 而不是 KeyV而不是 Value。它使您的代码显着更易于阅读和理解,并有助于避免与实际类型名称混淆。

关于java - 为什么 java 在我的变量声明中提示原始类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15160829/

相关文章:

Java 程序在 NetBeans 中完美运行,但在尝试运行时意外退出

c++ - 学习时空复杂度时语句XYZ是什么意思?

java - 如何从 OutputStream 获取文件以检索上传的文件

java - @ExtendWith(SpringExtension.class) 和 @ExtendWith(MockitoExtension.class) 有什么区别?

java - 可用于安卓游戏的最佳 2D 动画格式是什么

python - Allen Downey 的 Think Python 第 12 章(元组)的练习 6

c - 我尝试反转链表的逻辑错误是什么?

java - 如何在 activejdbc 中保存从表单提交的值?

c# - 哪种算法用于在数字范围内查找空数字范围?

string - 不是通过字符串 O(n) 的多项式滚动来计算哈希值,其中 n 是字符串大小?