【问题标题】:Map.getValue() returns a List a certain time, an Object another timeMap.getValue() 某个时间返回一个 List,另一个时间返回一个 Object
【发布时间】:2017-12-26 12:48:35
【问题描述】:

我有以下代码:

for (Map.Entry<String, List<Something>> somethingByString : somethingsByString.entrySet()) {
    methodThatTakesAListOfSomething(somethingByString.getValue());
}

我尝试用这个来改变代码:

for (Map.Entry<String, List<Something>> somethingByString : somethingsByString.entrySet()) {
    for(Something something : somethingsByString.getValue()) {
        methodThatTakesAListOfSomething(something);
}

然后编译器说我的方法不能将Something 作为参数,它需要List&lt;Something&gt;

为什么somethingsByString.getValue()在第一种情况下返回List&lt;Something&gt;,而在第二种情况下Something

【问题讨论】:

    标签: java list dictionary getvalue


    【解决方案1】:

    somethingsByString.getValue() 在这两种情况下都返回List&lt;Something&gt;

    但是,在第二种情况下,您将遍历 List&lt;Something&gt; 的元素(使用增强的 for 循环)并尝试将单个 Something 实例传递给 methodThatTakesAListOfSomething。这不起作用,因为该方法需要List&lt;Something&gt;

    如果您想在单独的方法调用中处理每个 Something 实例,您应该将 methodThatTakesAListOfSomething 更改为采用单个 Something 实例,或者创建一个采用单个 Something 的新方法:

    for (Map.Entry<String, List<Something>> somethingByString : somethingsByString.entrySet()) {
        for(Something something : somethingsByString.getValue()) {
            methodThatTakesSomething(something);
    }
    

    【讨论】:

      【解决方案2】:

      这种行为仅仅是因为在第二种情况下,您使用的是嵌套的 foreach 循环,这意味着您使用第一个 foreach 循环遍历条目,然后第二个循环遍历列表的元素。

      因此,将编译错误作为声明为methodThatTakesAListOfSomething(List&lt;Something&gt; input) 的方法无法接受Something 类型的输入。

      这是两种完全不同的类型

      相反,如果您的方法需要类型 Something 而不是 List&lt;Something&gt;,则要解决此问题,然后声明该方法具有 methodThatTakesAListOfSomething(Something input) 的参数,否则如果该方法应采用 List&lt;Something&gt;,则声明该方法作为methodThatTakesAListOfSomething(List&lt;Something&gt; input)

      最后,但并非最不重要的是,当您需要访问 Something 时使用嵌套的 foreach 循环,而当您想要访问 List&lt;Something&gt; 时使用单个 foreach 循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-18
        • 2020-03-05
        • 1970-01-01
        • 1970-01-01
        • 2017-12-03
        • 1970-01-01
        • 2021-11-28
        相关资源
        最近更新 更多