常量的优雅分类

来源:互联网 发布:手机mac修改器怎么用 编辑:程序博客网 时间:2024/05/22 11:59

常量分类

小伙伴们在写项目的时候肯定都有个类似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类中,但是不推荐,直接写在这个注解中岂不直观?

最后

建议多看别人的优质代码,看到高质量的的代码写法记得学以致用和分享~