在定义泛型类时,默认您可以使用任何的类型来实例化泛型类中的类型持有者,但假设您想要限制使用泛型类时,只能用某个特定类型或其子类才能实例化类型持有者的话呢? 您可以在定义类型持有者时,一并使用"extends"指定这个类型持有者必须是继承某个类型,举个实例来说:
import java.util.List; ListGenericFoo在声明类型持有者时,一并指定这个持有者必须继承自List接口(interface),在限定持有者时,无论是要限定的对 象是接口或类,都是使用"extends"关键字。 您使用"extends"限定类型持有者必须是实现List的类或其子类,例如LinkedList与ArrayList,下面的程序是合法的: ListGenericFoo<LinkedList> foo1 =
new ListGenericFoo<LinkedList>(); ListGenericFoo<ArrayList> foo2 = new ListGenericFoo<ArrayList>(); 但是如果不是List的类或是其子类,就会发生编译错误,例如下面的程序通不过编译: ListGenericFoo<HashMap> foo3 =
new ListGenericFoo<HashMap>(); 编译器会回报以下错误讯息: type parameter java.util.HashMap is not within its bound
ListGenericFoo<HashMap> foo3 = new ListGenericFoo<HashMap>(); HashMap并没有实现List接口,所以无法用来实例化类型持有者,事实上,当您没有使用extends关键字限定类型持有者时,默认则是Object下的所有子类都可以实例化类型持有者,即只写<T>时就相当于<T extends Object>。 |