Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java对每个元素做了什么,使它们成为object类型?_Java_Foreach_Hashtable - Fatal编程技术网

Java对每个元素做了什么,使它们成为object类型?

Java对每个元素做了什么,使它们成为object类型?,java,foreach,hashtable,Java,Foreach,Hashtable,这个问题涉及如何处理Java for每个循环中的元素。我有一个哈希表,它是一个LinkedList数组。LinkedList节点的数据部分包含TableEntry,其中K和V是键和值类型 我编写了一个for循环来查看LinkedList中的每个TableEntry,检查一个键是否等于TableEntry键。语法有点难看,所以我想也许for-each循环更优雅/简单 事实上,写起来更简单。然而,当我完成IDE时,我抱怨element.getValue()属于Object类型,而不是V类型。我在语句

这个问题涉及如何处理Java for每个循环中的元素。我有一个哈希表,它是一个LinkedList数组。LinkedList节点的数据部分包含
TableEntry
,其中K和V是键和值类型

我编写了一个for循环来查看LinkedList中的每个TableEntry,检查一个键是否等于TableEntry键。语法有点难看,所以我想也许for-each循环更优雅/简单

事实上,写起来更简单。然而,当我完成IDE时,我抱怨element.getValue()属于Object类型,而不是V类型。我在语句前面放置了一个V类型转换,它停止了抱怨。我还没有测试过这段代码,但我想知道,首先,这是一种可以接受的做法吗?第二,为什么即使元素具有类型V的方法,它们最终还是作为类型对象结束

@Override
public V getValue(K key)
{
    int index = getHashIndex(key);
    if(hashTable[index] != null)
    {

        //Standard for loop
        for(int i = 0; hashTable[index].get(i) != null; i++)
        {
            if(hashTable[index].get(i).getKey().equals(key))
            {
                return hashTable[index].get(i).getValue();
            }
        }

        //For-each loop should do same thing?
        for(TableEntry element : hashTable[index])
        {
            if(element.getKey().equals(key))
            {
                return (V) element.getValue();
            }
        }
    }
    return null;
}

您省略了增强for循环中的泛型参数。因此,您的
TableEntry
基本上默认为
TableEntry
(IDE将突出显示此非泛型使用,编译器将对此发出警告。请尝试将您的更改为包含必要的参数:

for(TableEntry<K, V> element : hashTable[index]) {
    if(element.getKey().equals(key)) {
        return element.getValue();
    }
}
for(TableEntry元素:哈希表[索引]){
if(element.getKey().equals(key)){
返回元素。getValue();
}
}

至于“标准”循环工作的原因,必须使用泛型参数声明哈希表,以便编译器知道您尝试访问的类型。

您在增强的for循环中省略了泛型参数。因此您的
TableEntry
基本默认为
TableEntry
(IDE将突出显示此非泛型使用,编译器将对此发出警告。请尝试将增强的更改为包含必要的参数:

for(TableEntry<K, V> element : hashTable[index]) {
    if(element.getKey().equals(key)) {
        return element.getValue();
    }
}
for(TableEntry元素:哈希表[索引]){
if(element.getKey().equals(key)){
返回元素。getValue();
}
}

至于为什么你的“标准”循环可以工作,你的哈希表必须用泛型参数声明,这样编译器才能知道你试图访问的类型。

啊,是的,修复了它,我的错误。谢谢!当它允许我向其他人检查这个问题时,会接受这个答案。啊,是的,修复了它,我的错误。谢谢!会接受这个answ呃,当它让我向其他人检查这个问题的时候。