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 ]
[
下一页 ]