将对象转换为字符串错误

时间:2015-04-04 09:12:09

标签: java string object iterator

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


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

4 个答案:

答案 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)

是的,

  1. 您无法将哈希集直接分配给字符串。
  2. 你必须转换它。使用toString方法

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

      “String input = responseMap.get(it.next());”

    2. 对于不同的数据类型,有许多重载方法。所以当你直接提供一个hashset时。它工作正常