在定义泛型类别时,预设可以使用任何的类型来实例化泛型类型中的类型,但是如果想要限制使用泛型类别时,只能用某个特定类型或者是其子类型才能实例化该类型时,可以在定义类型时,使用extends关键字指定这个类型必须是继承某个类,或者实现某个接口。当没有指定泛型继承的类型或接口时,默认使用T extends Object,所有默认情况下任何类型都可以作为参数传入。现在有这么一个需求,希望有一个参考名称foo可以接受所有下面的实例:
foo = new GenericFoo<ArrayList>();
foo = new GenericFoo<LinkedList>();
简单来说,实例化类型持有者时,它必须是实现List的类别或其子类别。这时,就要用’?’通配符,并使用”extends”关键字限定类型持有者。我们就可以这样写:GenericFoo<? Extends List> foo = null;这样就可以让foo指向上面的类型了。<?>的意思也是<? extends Object>。<T>在定义类使用,而<?>是创建对象时使用。 |