Java对每个元素做了什么,使它们成为object类型?
这个问题涉及如何处理Java for每个循环中的元素。我有一个哈希表,它是一个LinkedList数组。LinkedList节点的数据部分包含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类型。我在语句
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呃,当它让我向其他人检查这个问题的时候。