常量分类
小伙伴们在写项目的时候肯定都有个类似Constants.java这样用来存储的常量的类吧。那你们是不是也和下面一样存储常量呢?
public class Constants {
//theme type
public static final String BLUE_THEME="BLUE";
public static final String GRAY_THEME="GRAY";
public static final String RED_THEME="RED";
//db config
public static final String DB_NAME="user.db";
public static final String DB_PATH="/sdcard/";
public static final String TABLE_NAME="user";
//...
}
很明显的可以看出,上面的代码中的常量可以分为theme type和db config两大块。不能说上面的代码有错,可是一旦常量多起来的话就会造成常量的难管理。
前段时间有个同学发了一段代码给我看,大致如下:
public class Constants {
public interface THEME_TYPE {
String BLUE_THEME = "BLUE";
String GRAY_THEME = "GRAY";
String RED_THEME = "RED";
}
public interface DB_CONFIG {
String DB_NAME = "user.db";
String DB_PATH = "/sdcard/";
String TABLE_NAME = "user";
}
//...
}
对比下二者的使用方法:
//第一种
theme.setTheme(Constanst.BLUE_THEME);
//第二种
theme.setTheme(Constanst.THEME_TYPE.BLUE_THEME);
明显的看出后者实现了对常量的分组效果,管理起来很方便,而且代码的逼格提高了一个档次。
Annotation Support Lib
有时候我们想限制用户的set操作,这时候可以使用谷歌的annotation support lib中的类型定义注解,代码如下:
@Retention(RetentionPolicy.SOURCE)
@IntDef({GenderAnn.FEMALE,GenderAnn.MALE})
public @interface GenderAnn {
int MALE=1;
int FEMALE=0;
}
使用方法:
public void setGender(@GenderAnn int pGender);
这样在调用setGender方法的时候只能设置GenderAnn.MALE和GenderAnn.FEMALE这2个值。
当然这里的2个常量可以参照之前那样写到Constants类中,但是不推荐,直接写在这个注解中岂不直观?
最后
建议多看别人的优质代码,看到高质量的的代码写法记得学以致用和分享~