1、首先定义一个皮肤的类型:
public enum SkinType {
NORMAL,
TRANSPARENT,
}
可以看到,这个皮肤有两种类型,一种是正常、一种是透明类型。
2、其次,定义一个注解类型:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface SkinMode {
SkinType value() default SkinType.NORMAL;
}
可以看到,为注解@Target设置一个ElementType.TYPE 的值表示该注解作用于类上,类似的 @Target还有很多不同的属性可以设置,通过官方API文档可以看到,ElementType还有很多值,如下图所示:
。
注解@Retention的值为RetentionPolicy.RUNTIME的意思为在JVM运行时刻保留值,类似Target的,RetentionPolicy还有值:
3、在父类代码中使用反射获得SkinMode的值:
SkinMode skinMode = getClass().getAnnotation(SkinMode.class);
skinType = skinMode != null ? skinMode.value() : SkinType.NORMAL;
当类没有主动设置SkinMode的值的时候,则为默认值SkinType.NORMAL。
主动设置SkinMode值方式如下:
@SkinMode(SkinType.TRANSPARENT)
在类的开头加上注解并设定初始值,则其在运行期间获取的值为SkinType.TRANSPARENT。
可以看出,注解的使用让代码有更少的发生错误的可能性,也增加了可维护性。