有人可以告诉我这是否是将对象转换为字符串的正确方法?首先是下面的错误
public String generateResponse(HashSet<String> words){
Iterator it = words.iterator();
while(it.hasNext()){
String word = it.next(); // Object to string error
String input = responseMap.get(word);
if(input != null){
return input;
}
}
return pickDefaultResponse();
}
然后我做了这个,它起作用了。
public String generateResponse(HashSet<String> words){
Iterator it = words.iterator();
while(it.hasNext()){
String input = responseMap.get(it.next());// i put it here
if(input != null){
return input;
}
}
return pickDefaultResponse();
}
我对这个错误很好奇。我做了一点研究,因为我只是在学习,我不知道这是对还是错。它有效,但它是对的吗?
public String generateResponse(HashSet<String> words){
Iterator it = words.iterator();
while(it.hasNext()){
String word = it.next().toString();// added toString()
String input = responseMap.get(word);
if(input != null){
return input;
}
}
return pickDefaultResponse();
}
答案 0 :(得分:0)
String word = it.next()
首先它没有“;”来结束字符串,其次你需要显式地将它强制转换为String
将代码更改为String word =(String)it.next();
答案 1 :(得分:0)
将原始类型迭代器更改为泛型类型。
Iterator it = words.iterator();
到
Iterator<String> it = words.iterator();
答案 2 :(得分:0)
Iterator it = words.iterator();
此语句忽略迭代器的type参数。这意味着it.next()
的返回类型为Object
,如果没有广告投放,则无法将其分配给String
。
responseMap.get(it.next());
有效,因为Map.get
的参数的类型为Object
。
String word = it.next().toString();
也会有效,因为Object
返回的it.next()
实际上是String
,因此toString
会返回相同的String
。
这也可行:
String word = (String) (it.next());
但我建议在Iterator
变量中添加一个类型参数:
Iterator<String> it = words.iterator();
while(it.hasNext()){
String word = it.next();
// ...
注意:“忽略”类型参数大多数时候都是个坏主意。
答案 3 :(得分:-2)
是的,
你必须转换它。使用toString方法
对于我的信息,在第二种情况下...... 当您使用以下代码时
“String input = responseMap.get(it.next());”
对于不同的数据类型,有许多重载方法。所以当你直接提供一个hashset时。它工作正常