类似于下面这样的就是注解
注解可以在类上,成员变量上,方法上等
假如有2个注解是这样的:(其中的Author和Date)
那么这2个注解的定义就是这样的:
Author注解:
Date注解:
可以看到注解的定义和接口的定义比较类似,而Author注解中有name属性,所以使用Author的时候比较要填写name属性值
如果想要注解有默认值,可以这样:
这样使用Author注解时age属性值就可以不用填写,一个注解有多个属性值时使用时用逗号隔开
如果注解中只定义了1个属性且名称为value,那么使用时名称可省略,像这样:
注解也是一种类型,既然可以定义,那么也是可以获取的,像这样:
运行你会发现是会报错的,难道是代码错了,其实并不是,是注解的保留策略没有更改
再就要谈到元注解了,元注解就是注解类型上的注解,先看一下注解@Override的元注解
其中@Target和@Retention就是元注解,其中@Target表示注解的应用范围,@Retention表示注解的保留策略
这两个注解可以根据java.lang.annotation接口去查阅
java.lang.annotation.RetentionPolicy
所以只需要将@Retention的值设置为RUNTIME就可以读取注解了,它的默认值是CLASS
java.lang.annotation.ElementType
@Target的默认值应该是这所有的(这个我没有尝试啊)
看到这里就应该知道怎么解决刚才报错的问题了
只需要在自定义注解上加上元注解@Retention就行了,当然,也可以设置一下注解@Target,就像这样:
Author注解:
Date注解:
再运行就可以得到结果了
还有刚才提到的关于注解的继承,也是使用元注解:@Inherited
注解默认不继承,不过这继承也是有限制的
@Inherited //表示注解是否能继承, 只能作用在类上, 只对类的继承有效, 对实现接口无效
注解可能用到的地方不多,不过了解注解可以让我们更理解一些东西。比较springmvc中的注解等