gpt4 book ai didi

带有泛型的 Java 集合给我不适用的参数错误

转载 作者:搜寻专家 更新时间:2023-11-01 02:31:14 25 4
gpt4 key购买 nike

我有一个类FourByFourBoard延伸 GameBoard .我定义了以下字段:

private Map<Integer,List<Key<? extends GameBoard>>> mGameTypeToKeysMap = new Hashtable<Integer,List<Key<? extends GameBoard>>>();

private List<Key<FourByFourBoard>> mFourByFourBoardKeys = new ArrayList<Key<FourByFourBoard>>();

在我的构造函数中,我尝试调用:

mGameTypeToKeysMap.put(Game.FOUR_BY_FOUR, mFourByFourBoardKeys);

但是我明白了:

The method put(Integer, List<Key<? extends GameBoard>>) in the type Map<Integer,List<Key<? extends GameBoard>>> is not applicable for the arguments (int, List<Key<FourByFourBoard>>)

我可以使用不同的方法来完成我想做的事情,但在盯着代码看了一会儿之后,我不太明白为什么这不起作用。

编辑

这个问题可能比我想象的要简单:

如果我尝试:

Key<GameBoard> a = mFourByFourBoardKeys.get(0);

我得到:

Type mismatch: cannot convert from Key<FourByFourBoard> to Key<GameBoard>

虽然:

GameBoard someBoard = new FourByFourBoard();

是合法的。所以这仍然是一个泛型问题,但集合部分并不重要。我的头还在有点晕。

最佳答案

A List<A extends B>和一个 List<B>不一样,因为在第一个列表中您只能添加 A实例,第二个你可以同时添加 AB实例。

这一切都在 Java generics tutorial 中得到了很好的解释。 ,更具体地说在第 4 页(Section Generics and Subtyping)

编辑

一个小例子来说明这一点并更紧密地匹配你的代码

Map<Integer, List<List<? extends Number>>> a = new Hashtable<Integer,List<List<? extends Number>>>();
List<List<Double>> b = new ArrayList<List<Double>>();
a.put(0, b);//won't compile
List<List<? extends Number>> c = new ArrayList<List<? extends Number>>( );
a.put( 1, c );//works perfectly

无法编译的原因在我链接到的 PDF 中进行了解释,并引用了相关部分

Let’s test our understanding of generics. Is the following code snippet legal?

List<String> ls = new ArrayList<String>(); //1
List<Object> lo = ls; //2

Line 1 is certainly legal. The trickier part of the question is line 2. This boils down to the question: is a List of String a List of Object. Most people’s instinct is to answer: “sure!”. Well, take a look at the next few lines:

lo.add(new Object()); // 3
String s = ls.get(0); // 4: attempts to assign an Object to a String

我建议通读整个 PDF,并查看该文档中的(其他)示例。

关于带有泛型的 Java 集合给我不适用的参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8782152/

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