有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java泛型参数中使用父类

我不明白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

我该如何解决这样的问题


共 (1) 个答案

  1. # 1 楼答案

    下面是将成功编译的代码:

    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构成MapvalueCollection类的^},因此test()将被调用,因为它还返回一个Map类型为^{}

    还要注意,您需要在maintest()的签名中添加<B>

    希望有帮助