Java泛型编程中使用extends关键字指定泛型参数类型的上边界(后面还会讲到使用super关键字指定泛型的下边界),即泛型只能适用于extends关键字后面类或接口的子类。
Java泛型编程的边界可以是多个,使用如<T extends A & B & C>语法来声明,其中只能有一个是类,并且只能是extends后面的第一个为类,其他的均只能为接口(和类/接口中的extends意义不同)。
使用了泛型边界之后,泛型对象就可以使用边界对象中公共的成员变量和方法。
interface HasColor{ java.awt.Color getColor(); } class Colored<T extends HasColor>{ T item; Colored(T item){ this.item = item; } java.awt.Color color(){ //调用HasColor接口实现类的getColor()方法 return item.getColor(); } } class Dimension{ public int x, y, z; } Class ColoredDimension<T extends Dimension & HasColor>{ T item; ColoredDimension(T item){ this.item = item; } T getItem(){ return item; } java.awt.Color color(){ //调用HasColor实现类中的getColor()方法 return item.getColor(); } //获取Dimension类中定义的x,y,z成员变量 int getX(){ return item.x; } int getY(){ return item.y; } int getZ(){ return item.z; } } interface Weight{ int weight(); } class Solid<T extends Dimension & HasColor & Weight>{ T item; Solide(T item){ this.item = item; } T getItem(){ return item; } java.awt.Color color(){ //调用HasColor实现类中的getColor()方法 return item.getColor(); } //获取Dimension类中定义的x,y,z成员变量 int getX(){ return item.x; } int getY(){ return item.y; } int getZ(){ return item.z; } int weight(){ //调用Weight接口实现类的weight()方法 return item.weight(); } } class Bounded extends Dimension implements HasColor, Weight{ public java.awt.Color getColor{ return null; } public int weight(){ return 0; } } public class BasicBounds{ public static void main(String[] args){ Solid<Bounded> solid = new Solid<Bounded>( new Bounded()); solid.color(); solid.getX(); solid.getY(); solid.getZ(); solid.weight(); } }