打字猴:1.700447472e+09
1700447472
1700447473 }
1700447474
1700447475 }
1700447476
1700447477 public static void main(String[]args){
1700447478
1700447479 discount(new Me());
1700447480
1700447481 }
1700447482
1700447483 使用“&”符号设定多重边界(Multi Bounds),指定泛型类型T必须是Staff和Passenger的共有子类型,此时变量t就具有了所有限定的方法和属性,要再进行判断就易如反掌了。
1700447484
1700447485 在Java的泛型中,可以使用“&”符号关联多个上界并实现多个边界限定,而且只有上界才有此限定,下界没有多重限定的情况。想想你就会明白:多个下界,编码者可自行推断出具体的类型,比如“?super Integer”和“?extends Double”,可以更细化为Number类型了,或者Object类型了,无须编译器推断了。
1700447486
1700447487 为什么要说明多重边界?是因为编码者太少使用它了,比如一个判断用户权限的方法,使用的是策略模式(Strategy Pattern),示意代码如下:
1700447488
1700447489 public class UserHandler<T extends User>{
1700447490
1700447491 //判断用户是否有权限执行操作
1700447492
1700447493 public boolean permit(T user, List<Job>jobs){
1700447494
1700447495 List<Class<?>>iList=Arrays.asList(user.getClass().getInterfaces());
1700447496
1700447497 //判断是否是管理员
1700447498
1700447499 if(iList.indexOf(Admin.class)>-1){
1700447500
1700447501 Admin admin=(Admin)user;
1700447502
1700447503 /*判断管理员是否有此权限*/
1700447504
1700447505 }else{
1700447506
1700447507 /*判断普通用户是否有此权限*/
1700447508
1700447509 }
1700447510
1700447511 return false;
1700447512
1700447513 }
1700447514
1700447515 }
1700447516
1700447517 此处进行了一次泛型参数类别判断,这里不仅仅违背了单一职责原则(Single Responsibility Principle),而且让“泛型”很汗颜:已经使用泛型限定参数的边界了,还要进行泛型类型判断。事实上,使用多重边界可以很方便地解决问题,而且非常优雅,建议读者在开发中考虑使用多重限定。
1700447518
1700447519
1700447520
1700447521
[ 上一页 ]  [ :1.700447472e+09 ]  [ 下一页 ]