将对象转换为字符串错误

converting object to string error

有人可以告诉我这是将对象转换为字符串的正确方法吗?首先是下面的错误


       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();
       }

是的

  1. 您不能将哈希集直接分配给字符串。

你必须转换它。使用 toString 方法

  1. 关于我的信息,在你的第二种情况下...... 当您使用以下代码时

    "String input = responseMap.get(it.next());"

对于不同的数据类型,有许多重载方法。因此,当您直接提供哈希集时。它工作正常

字符串字=it.next()

首先它没有“;”来结束字符串,其次你需要明确地将它转换为 String

将代码更改为 String word = (String)it.next();

将原始类型迭代器更改为通用类型。

Iterator it = words.iterator();

Iterator<String> it = words.iterator();
Iterator it = words.iterator();

这条语句忽略了迭代器的类型参数。这意味着 it.next() 的 return 类型是 Object,如果不进行强制转换,则无法将其分配给 String

responseMap.get(it.next());

有效,因为 Map.get 的参数具有 Object.

类型
String word = it.next().toString();

也会起作用,因为 it.next() 编辑的 Object return 实际上是 String,因此 toString return相同 String.

这也行得通:

String word = (String) (it.next());

但我建议在 Iterator 变量中添加一个类型参数:

Iterator<String> it = words.iterator();
while(it.hasNext()){
    String word = it.next();
    // ...

注意: "Ignoring" 大多数情况下,类型参数不是一个好主意。