java泛型之三——参数泛型上下限
2013-10-30 11:56
429 查看
class A { } class B extends A implements Comparable<B>{ @Override public int compareTo(B o) { return 0; } } class B1 extends B { } interface Inf1 { } class C implements Inf1 { } class D extends A implements Inf1 { } class Point<T,M,K> { public T x; public M y; public K k; } class Test { /**强制要求show1参数Point对象被创建时,指定泛型 * T为A类(及其子类); * M为Inf1(及其实现类) * K为B(及其子类) * */ public void show1(Point<? extends A, ? extends Inf1, ? super B> p) { } public static void main(String[] args) { Point<A,Inf1,B> p1 = new Point<A,Inf1,B>(); Point<D,D,A> p2 = new Point<D,D,A>(); Point<A,B,C> p3 = new Point<A,B,C>(); Test test = new Test(); /**对*/ test.show1(p1); /**对*/ test.show1(p2); /**错,应为创建对象p3时,指定的M的泛型为B类,不符合show1函数中强制要 * 求的M为Inf1(及其实现类) * 并且指定的C类也不符合show1函数强制要求的K为B(及其父类) * */ test.show1(p3); } } class Dog<F> { public F x; /**强制要求show1参数Point对象被创建时,指定泛型 * T为F及其子类(包括接口) * M为F及其父类(包括接口) * K为F及其子类(包括接口) * */ public void show1(Point<? extends F, ? super F, ? extends F> p) { } /** * 强制要求show1参数Point对象被创建时,指定泛型 * T为F及其子类(包括接口) * M为F及其父类(包括接口) * K为Comparable的实现类,并且是F及其父类(包括接口),即上限是Comparable,下限是F */ public void show2(Point<? extends F, ? super F, ? extends Comparable<? super F>> p) { } /** * 下面代码中Dog<B>使得F为B类创建对象p时符合: * (1)B1为B的子类——对应T为F及其子类; * (2)A为B及其父类——对应M为F及其父类; * (3)B为Comparable的实现类,并且是B的父类——对应K为Comparable的实现类,并且是F及其父类; * 所以对象p可以使用show2函数的参数 */ public static void main(String[] args) { Dog<B> dog = new Dog<B>(); Point<B1,A, B> p = new Point<B1,A, B>(); dog.show2(p); } }
相关文章推荐