日期:2014-05-19  浏览次数:21122 次

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

------解决方案--------------------

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)
------解决方案--------------------
Java code

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);
    }
}