打字猴:1.700446855e+09
1700446855
1700446856 if(access==null||!access.level().identify()){
1700446857
1700446858 //没有Access注解或者鉴权失败
1700446859
1700446860 System.out.println(access.level().REFUSE_WORD);
1700446861
1700446862 }
1700446863
1700446864 }
1700446865
1700446866 看看这段代码,简单、易读,而且如果我们是通过ClassLoader类来解释该注解的,那会使我们的开发更加简洁,所有的开发人员只要增加注解即可解决访问控制问题。注意看加粗代码,access是一个注解类型,我们想使用Identifier接口的identify鉴权方法和REFUSE_WORD常量,但注解是不能继承的,那怎么办?此处,可通过枚举类型CommonIdentifier从中间做一个委派动作(Delegate),委派?没看到!你可以让identify返回一个对象,或者在Identifier上直接定义一个常量对象,那就是“赤裸裸”的委派了!
1700446867
1700446868
1700446869
1700446870
1700446871 编写高质量代码:改善Java程序的151个建议 [:1700438164]
1700446872 编写高质量代码:改善Java程序的151个建议 建议92:注意@Override不同版本的区别
1700446873
1700446874 @Override注解用于方法的覆写上,它在编译期有效,也就是Java编译器在编译时会根据该注解检查方法是否真的是覆写,如果不是就报错,拒绝编译。该注解可以很大程度地解决我们的误写问题,比如子类和父类的方法名少写了一个字符,或者是数字0和字母O未区分出来等,这基本上是每个程序员都曾经犯过的错误。在代码中加上@Override注解基本可以杜绝出现此类问题,但是@Override有个版本问题,我们来看如下代码:
1700446875
1700446876 interface Foo{
1700446877
1700446878 public void doSomething();
1700446879
1700446880 }
1700446881
1700446882 class Impl implements Foo{
1700446883
1700446884 @Override
1700446885
1700446886 public void doSomething(){
1700446887
1700446888 }
1700446889
1700446890 }
1700446891
1700446892 这是一个简单的@Override示例,接口中定义了一个doSomething方法,实现类Impl实现此方法,并且在方法前加上了@Override注解。这段代码在Java 1.6版本上编译没有任何问题,虽然doSomething方法只是实现了接口定义,严格来说并不能算是覆写,但@Override出现在这里可以减少代码中可能出现的错误。
1700446893
1700446894 可如果在Java 1.5版本上编译此段代码,就会出现如下错误:
1700446895
1700446896 The method doSomething()of type Impl must override a superclass method Client.java
1700446897
1700446898 注意,这是个错误,不能继续编译。原因是1.5版中@Override是严格遵守覆写的定义:子类方法与父类方法必须具有相同的方法名、输入参数、输出参数(允许子类缩小)、访问权限(允许子类扩大),父类必须是一个类,不能是一个接口,否则不能算是覆写。而这在Java 1.6就开放了很多,实现接口的方法也可以加上@Override注解了,可以避免粗心大意导致方法名称与接口不一致的情况发生。
1700446899
1700446900 在多环境部署应用时,需要考虑@Override在不同版本下代表的意义,如果是Java 1.6版本的程序移植到1.5版本环境中,就需要删除实现接口方法上的@Override注解。
1700446901
1700446902
1700446903
1700446904
[ 上一页 ]  [ :1.700446855e+09 ]  [ 下一页 ]