gpt4 book ai didi

java - java中使用通配符的hashmap无法赋值

转载 作者:行者123 更新时间:2023-12-01 23:21:33 25 4
gpt4 key购买 nike

我正在研究java中的泛型。我制作了一个 Map 并使用“new HashMap>()”进行初始化。之后,我创建了一个 ArrayList 并将其放入该变量中。但是,这段代码无法编译。

错误消息是:

“类型 Map> 中的方法 put(String, capture#1-of ? extends List) 不适用于参数 (String, List)”

在 Map.put() 方法上。

我的代码如下。

package org.owls.generic.main;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Main {
public static void main(String[] args) {
ArrayList<String> tmpArr = new ArrayList<String>();
tmpArr.add("A");
tmpArr.add("B");
List<?> value = new ArrayList<String>(tmpArr);
Map<String, ? extends List<String>> testMap = new HashMap<String, List<String>>();
testMap.put("K", value);
}
};

我无法理解为什么编译器看起来是类型,即使我分配了继承类“List”。

抱歉我的英语不好,欢迎编辑。谢谢您的回答:D

最佳答案

您不能将除 null 之外的任何内容放入带有 ? 的泛型类型中吗?扩展... 参数。这是基本的泛型——由于类型参数未知,因此您不能在其中放入任何内容,因为您尝试放入的任何内容都不能保证是该未知类型的子类型。

回想一下 PECS(生产者 extends,消费者 super)规则。 ? extends 只能用于生产者。放入一些东西就是消费者。

关于java - java中使用通配符的hashmap无法赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20558007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com