gpt4 book ai didi

java - 在Java泛型参数中使用父类

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

我不明白 Java 中的泛型是如何完全工作的。我有类似的情况,我在下面的代码中简化了:

public static void main(String[] args) {
Map<String, Collection<B>> map1 = test();
Map<String, List<B>> map2 = test();
Map<String, ArrayList<B>> map3 = test();
}

private static Map<String, ArrayList<B>> test() {
return null;
}

当创建map1或map2时,我收到一个错误,指出类型不兼容 - 它本来需要ArrayList,但得到了Collection/List。

如何解决这样的问题?

最佳答案

下面是编译成功的代码:

public static <B> void main(String[] args) {
Map<String, ? extends Collection<B>> map1 = test();
Map<String, ? extends List<B>> map2 = test();
Map<String, ArrayList<B>> map3 = test();
}

private static <B> Map<String, ArrayList<B>> test() {
return null;
}

您需要添加? extends Collection<B>? extends List<B>因为写? extends Collection意味着 Object形成 value Map的是 sub typeCollection类,因此 test()将被调用,因为它还返回 Map谁的valueArrayList类型,实际上是 sub typeCollection

另请注意,您需要添加 <B>main的签名中和test()

希望对你有帮助!

关于java - 在Java泛型参数中使用父类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42087963/

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