严格限定泛型类型采用多重界限

从哲学上来说,很难描述一个具体的人,你可以描述它的长相、性格、工作等,但是人都是有多重身份的,估计只有使用多个And (与操作)将所有的描述串联起来才能描述一个 完整的人,比如我,上班时我是一个职员,下班了坐公交车我是一个乘客,回家了我是父母的孩子,是儿子的父亲……角色时刻在变换。那如果我们要使用Java程序来对一类人进行管 理,该如何做呢?比如在公交车费优惠系统中,对部分人员(如工资低于2500元的上班族并且是站立着的乘客)车费打8折,该如何实现呢?

注意这里的类型参数有两个限制条件:一为上班族;二为是乘客。具体到我们的程序中就应该是一个泛型参数具有两个上界(UpperBound),首先定义两个接口及实现类,代码如下:

interface Staff{
	public int getSalary();
}

interface Passenger{
	public boolean isStanding();
}

class Me implements Staff ,Passenger{

	@Override
	public boolean isStanding() {
		// TODO Auto-generated method stub
		return true;
	}

	@Override
	public int getSalary() {
		// TODO Auto-generated method stub
		return 20000;
	}


“Me”这种类型的人物有很多,比如做系统分析师也是一个职员,也坐公交车,但他的工资实现就和我不同,再比如Boss级的人物,偶尔也坐公交车,对大老板来说他也只是一 个职员,他的实现类也不同,也就是说如果我们使用“T extends Me”是限定不了需求对象 的,那该怎么办呢?可以考虑使用多重限定,代码如下:

//工资低于2500元的上班族并且站立的乘客车票打8

public static<T extends Staff & Passenger> void discount(T t){
	   if(t.getSalary()<25000 && t.isStanding()){
		   System.out.println("恭喜你,你的车票打八折");
	   }
   }
   
   public static void main(String[] args) {
	discount(new Me());
}

使用“&”符号设定多重边界(Multi Bounds),指定泛型类型T必须是Staff和Passenger 的共有子类型,此时变量t就具有了所有限定的方法和属性,要再进行判断就易如反掌了。

在Java的泛型中,可以使用“&”符号关联多个上界并实现多个边界限定,而且只有上界才有此限定,下界没有多重限定的情况。想想你就会明白:多个下界,编码者可自行推断 出具体的类型,比如“? super Integer”和“? extends Double”,可以更细化为Number类型 了,或者Object类型了,无须编译器推断了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你是我的天晴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值