在编码中遇到一个问题
A extends B.
把List<A>作为参数调用参数类型声明为List<B>的方法,编译器报错。
按照我的理解,不应该出现这样的情况啊,莫非编译器进行泛型类型检查时,没有检查继承?

解决方案 »

  1.   

    List<A> 装B应该可以吧
      

  2.   


    真的可以吗?List<B> 装A才可以哦java之上塑造型:子类对象可以指向父类引用
    楼主,可不能颠倒噢
      

  3.   

    有点看不懂呢,不是谁调谁,谁声明谁。
    粘代码,可能List<A>,List<B>弄反了。
      

  4.   

    我写反了   郁闷  就好比List<Object> 可以装任意类型,一个意思
      

  5.   


    class B{}
    class A extends B{}
    class C{
        public static void doSomething(List<B> args){
        }    public static void main(String[] args){
            List<A> a = new ArrayList<A>();
            C.doSomething(a);
        }
    }
    代码就是这样的  编译报错
      

  6.   


            List<B> a = new ArrayList<B>();
            C.doSomething(a);
    你可以这样啊,这个 a一样的可以增加类型为A的对象,而且doSomething要求的参数也只是List<B>,再者泛刑是指的List<T>,这个T啊,并不是指List本身,List只是装泛型对象的一个容器。如果你doSomething可以定义为doSomething(List<?> list),如果你确实需要只有B及B的子类才能调用此方法,你可以定义为
     <T extends B> void doSomething(List<T> args)
      

  7.   


    这样好像真的不可以。
    你还是创建List<B>吧,再往里面添加A不是一样的嘛
      

  8.   


    import java.util.List ;
    import java.util.ArrayList ;
    class B{}
    class A extends B{}
    public class C{
        public static void doSomething(List<? extends B> args){
        }    public static void main(String[] args){
            List<A> a = new ArrayList<A>();
            C.doSomething(a);
        }
    }
    所有继承于B的 和B都可以
      

  9.   


    class B{}
    class A extends B{}
    class C{
        public static void doSomething(List<B> args){
        }    public static void main(String[] args){
            List<A> a = new ArrayList<A>();
            C.doSomething(a);
        }
    }你这里静态方法 访问非静态类 需要new出来,不是继承报错吧,C类加上static 修饰应该就不报错了撒