gpt4 book ai didi

java - 将具体的 EnumMap 对象列表传递给通用 EnumMap 参数列表会导致编译错误

转载 作者:行者123 更新时间:2023-11-30 01:39:51 26 4
gpt4 key购买 nike

我有一段代码,我认为应该编译,但事实并非如此。这是代码:

public class Program {
public void myMethod(List<EnumMap<? extends MyInterface, String>> map)
{

}

public void caller()
{
EnumMap<MyEnum, String> map = new EnumMap<MyEnum, String>(MyEnum.class);

List<EnumMap<MyEnum, String>> list = new LinkedList<EnumMap<MyEnum, String>>();

myMethod(list); //error argument type is not compatible

}

}

MyEnum 是一个实现 MyInterface 的枚举。

为什么调用 myMethod(list) 会导致参数类型不兼容?

如果我将 myMethod 的签名更改为:

public void myMethod(List<? extends Map<? extends MyInterface, String>> map)

然后一切正常,但我仍然很困惑,想知道为什么原来的方法签名不起作用。

最佳答案

所以,鉴于

enum MyEnum implements MyInterface { ...}
...
List<EnumMap<MyEnum, String>> as = new ArrayList<EnumMap<MyEnum, String>>();
List<EnumMap<? extends MyInterface, String>> bs;

我们应该能够分配bs = as

现在假设

enum OtherEnum implements MyInterface { XXX }
...
EnumMap<OtherEnum, String> otherMap =
new EnumMap<OtherEnum, String>(OtehrEnum.class);
otherMap.put(OtherEnum.XXX, "");
bs.set(0, otherMap);
EnumMap<MyEnum, String> myMap = as.get(0);
MyEnum xxx = myMap.keys().iterator().next();

otherMapmyMap 指向相同的对象,但类型明显不同。更糟糕的是,xxx 属于 MyEnum,但指向 OtherEnum 类型的对象。

在存在多态性的情况下,指向指针的指针是很困难的。

关于java - 将具体的 EnumMap 对象列表传递给通用 EnumMap 参数列表会导致编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1053878/

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