有些时候,我们会有一个需求,就是一个方法的参数只能是某些特定的值,以View为例,它的setVisibility方法中就只能传入VISIBLE、INVISIBLE和GONE这三个参数。下面来看一下其实现方法:
public static final int VISIBLE = 0x00000000;
public static final int INVISIBLE = 0x00000004;
public static final int GONE = 0x00000008;
@IntDef({VISIBLE, INVISIBLE, GONE})
@Retention(RetentionPolicy.SOURCE)
public @interface Visibility {}
其中@Retention表明注解的生命周期,有三种可选项:
-
RetentionPolicy.SOURCE:在原文件中有效,被编译器丢弃。 -
RetentionPolicy.CLASS:在class文件有效,可能会被虚拟机忽略。 -
RetentionPolicy.RUNTIME:在运行时有效。
@IntDef就很好理解了,就是这些值是int类型的,除此之外还有@StringDef、@LongDef分别表示String类型和Long类型。










网友评论