打字猴:1.700447418e+09
1700447418 编写高质量代码:改善Java程序的151个建议 [:1700438172]
1700447419 编写高质量代码:改善Java程序的151个建议 建议99:严格限定泛型类型采用多重界限
1700447420
1700447421 从哲学上来说,很难描述一个具体的人,你可以描述它的长相、性格、工作等,但是人都是有多重身份的,估计只有使用多个And(与操作)将所有的描述串联起来才能描述一个完整的人,比如我,上班时我是一个职员,下班了坐公交车我是一个乘客,回家了我是父母的孩子,是儿子的父亲……角色时刻在变换。那如果我们要使用Java程序来对一类人进行管理,该如何做呢?比如在公交车费优惠系统中,对部分人员(如工资低于2500元的上班族并且是站立着的乘客)车费打8折,该如何实现呢?
1700447422
1700447423 注意这里的类型参数有两个限制条件:一为上班族;二为是乘客。具体到我们的程序中就应该是一个泛型参数具有两个上界(Upper Bound),首先定义两个接口及实现类,代码如下:
1700447424
1700447425 //职员
1700447426
1700447427 interface Staff{
1700447428
1700447429 //工资
1700447430
1700447431 public int getSalary();
1700447432
1700447433 }
1700447434
1700447435 //乘客
1700447436
1700447437 interface Passenger{
1700447438
1700447439 //是否是站立状态
1700447440
1700447441 public boolean isStanding();
1700447442
1700447443 }
1700447444
1700447445 //定义“我”这个类型的人
1700447446
1700447447 class Me implements Staff, Passenger{
1700447448
1700447449 public boolean isStanding(){
1700447450
1700447451 return true;
1700447452
1700447453 }
1700447454
1700447455 public int getSalary(){
1700447456
1700447457 return 2000;
1700447458
1700447459 }
1700447460
1700447461 }
1700447462
1700447463 “Me”这种类型的人物有很多,比如做系统分析师也是一个职员,也坐公交车,但他的工资实现就和我不同,再比如Boss级的人物,偶尔也坐公交车,对大老板来说他也只是一个职员,他的实现类也不同,也就是说如果我们使用“T extends Me”是限定不了需求对象的,那该怎么办呢?可以考虑使用多重限定,代码如下:
1700447464
1700447465 //工资低于2500元的上班族并且站立的乘客车票打8折
1700447466
1700447467 public static<T extends Staff&Passenger>void discount(T t){
[ 上一页 ]  [ :1.700447418e+09 ]  [ 下一页 ]