【问题标题】:converting object to string error将对象转换为字符串错误
【发布时间】:2015-06-09 06:41:53
【问题描述】:

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


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

【问题讨论】:

  • 使用 Iterator.. 这也取决于你添加到 HashSet 的对象
  • 或者只是一个 for-each 循环...
  • 谢谢。有一个字符串迭代器。我今天学到了一些东西:)

标签: java string object iterator


【解决方案1】:
Iterator it = words.iterator();

此语句忽略迭代器的类型参数。这意味着it.next() 的返回类型是Object,如果没有强制转换,它不能分配给String

responseMap.get(it.next());

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

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

也可以,因为it.next() 返回的Object 实际上是String,因此toString 返回相同的String

这也可以:

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

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

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

注意:“忽略”类型参数大多数时候是个坏主意。

【讨论】:

  • 这个解释对我这样的初学者很有帮助。谢谢。
【解决方案2】:

String word = it.next()

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

把代码改成String word = (String)it.next();

【讨论】:

    【解决方案3】:

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

    Iterator it = words.iterator();
    

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

    【讨论】:

    • @RyanG :如果您发现答案有用,您可以对其进行投票以帮助他人。谢谢
    • 我现在只有 8 个代表点 :( 我被禁止投反对票,但我真诚地感谢您的帮助。再次感谢。
    【解决方案4】:

    是的

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

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

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

      "字符串输入 = responseMap.get(it.next());"

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

    【讨论】:

      猜你喜欢
      • 2022-11-28
      • 2015-06-14
      • 1970-01-01
      • 2014-01-14
      • 2011-08-02
      • 2016-06-10
      相关资源
      最近更新 更多