java泛型之三——参数泛型上下限

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值