首先建立一个@Environment注解,在里面定义6个字符串常量,即不同的环境。
public @interface Environment {
/**
* 正式环境http
*/
public static final String RELEASE_HTTP = "http://gw.release.domain.com";
/**
* 预发环境http
*/
public static final String PRE_HTTP = "http://gw.pre.domain.com";
/**
* 测试环境http
*/
public static final String DAILY_HTTP = "http://gw.daily.domain.com";
/**
* 正式环境https
*/
public static final String RELEASE_HTTPS = "https://gw.release.domain.com";
/**
* 预发环境https
*/
public static final String PRE_HTTPS = "https://gw.pre.domain.com";
/**
* 测试环境https
*/
public static final String DAILY_HTTPS = "https://gw.daily.domain.com";
}
然后在该注解上加上@StringDef注解,约束为定义的6个常量
@StringDef({Environment.RELEASE_HTTP, Environment.PRE_HTTP, Environment.DAILY_HTTP, Environment.DAILY_HTTPS, Environment.PRE_HTTPS, Environment.RELEASE_HTTPS})
为了让注解只在源码级别存在,我们还需要加入下面的元注解
@Retention(RetentionPolicy.SOURCE)
最后就是修改设置环境的代码,在其入参上加入注解限制。
private String environment;
public void setEnvironment(@Environment String environment) {
this.environment = environment;
}
这时候,如果你使用的不是注解约束的6个环境,那么就会报一个提示,并且是红色的下划线,提示你这里需要修改。
image.png
于是你必须像这么使用
core.setEnvironment(Environment.DAILY_HTTP);
core.setEnvironment(Environment.PRE_HTTP);
core.setEnvironment(Environment.RELEASE_HTTP);
core.setEnvironment(Environment.DAILY_HTTPS);
core.setEnvironment(Environment.PRE_HTTPS);
core.setEnvironment(Environment.RELEASE_HTTPS);
这样以来,在一定程度上能起到约束作用。But,如果你无视了该警告,编译仍然是可以通过的哟~,这一点需要特别注意哦。
感谢
Android 从枚举到注解最佳实践
具体用例可看
注解的简单用例
网友评论