请教一个java泛型的问题

有如下代码:
方法test参数是需要C类,但是因为B类继承C,所以我传B是OK的。

public class A {

    public static void main(String[] args){
        B b = new B();
        test(b);
    }

    private static void test(C c){

    }

}

class B extends C{

}

class C{

}

但是如下代码却不行,不理解?

import java.util.ArrayList;
import java.util.List;

public class A {

    public static void main(String[] args){
        List<B> b = new ArrayList<>();
        test(b);
    }

    private static void test(List<C> c){

    }

}

class B extends C{

}

class C{

}

这时候会报错:

test
(java.util.List<com.test.Extends.C>)
in A cannot be applied
to
(java.util.List<com.test.Extends.B>)
 

实在不理解,请大家指教。
如果我就要传集合,有什么办法吗?

摇曳的蔷薇
浏览 558回答 5
5回答

繁星coding

参数修改为 private static void test(List<? extends C> c){ } 解决你的问题。 为什么直接类可以: 这是普通的继承关系,自然没问题 为什么集合不可以: 这是类型转换,是两码事。

茅侃侃

基础的知识层主Java泛型,还是需要多看看书Java编程思想等,一句话:泛型是不具有继承性的,Java类的多态性不能强行安插到泛型上。

一只名叫tom的猫

你爸爸的财产你可以继承,你爸爸的公司的财产不能被你的公司继承,也就不存在多态性了。

凤凰求蛊

继承和类型转换是两码事,应该这样声明:、private static void test(List<? extends C> c) { }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java