打字猴:1.700446663e+09
1700446663 编写高质量代码:改善Java程序的151个建议 [:1700438162]
1700446664 编写高质量代码:改善Java程序的151个建议 建议90:小心注解继承
1700446665
1700446666 Java从1.5版开始引入了注解(Annotation),其目的是在不影响代码语义的情况下增强代码的可读性,并且不改变代码的执行逻辑,对于注解始终有两派争论,正方认为注解有益于数据与代码的耦合,“在有代码的周边集合数据”;反方认为注解把代码和数据混淆在一起,增加了代码的易变性,削弱了程序的健壮性和稳定性。这些争论暂且不表,我们要说的是一个我们不常用的元注解(Meta-Annotation):@Inherited,它表示一个注解是否可以自动被继承,我们来看它应如何使用。
1700446667
1700446668 思考一个例子,比如描述鸟类,它有颜色、体型、习性等属性,我们以颜色为例,定义一个注解来修饰一下,代码如下:
1700446669
1700446670 @Retention(RetentionPolicy.RUNTIME)
1700446671
1700446672 @Target(ElementType.TYPE)
1700446673
1700446674 @Inherited
1700446675
1700446676 @interface Desc{
1700446677
1700446678 enum Color{
1700446679
1700446680 White, Grayish, Yellow;
1700446681
1700446682 }
1700446683
1700446684 //默认颜色是白色的
1700446685
1700446686 Color c()default Color.White;
1700446687
1700446688 }
1700446689
1700446690 该注解Desc前增加了三个元注解:Retention表示的是该注解的保留级别,Target表示的是该注解可以标注在什么地方,@Inherited表示该注解会被自动继承。注解定义完毕,我们把它标注在类上,代码如下:
1700446691
1700446692 @Desc(c=Color.White)
1700446693
1700446694 abstract class Bird{
1700446695
1700446696 //鸟的颜色
1700446697
1700446698 public abstract Color getColor();
1700446699
1700446700 }
1700446701
1700446702 //麻雀
1700446703
1700446704 class Sparrow extends Bird{
1700446705
1700446706 private Color color;
1700446707
1700446708 //默认是浅灰色
1700446709
1700446710 public Sparrow(){
1700446711
1700446712 color=Color.Grayish;
[ 上一页 ]  [ :1.700446663e+09 ]  [ 下一页 ]