Constants类即常量类是将一些常用的变量集合到一个地方的类,常量应该定义在类中,而不是接口中(见Effective Java 2nd Edition, Item19),如果定义的常量是int类型的,可使用Enum类来代替(见Effective Java 2nd Edition, Item30),然而,有些常量类,比如String类型的常量类,可能不太适合使用Enum类来代替。

不像Enum类,系统在编译后自动生成了values方法,返回所有Enum类中常量的数组,自行定义的常量类没有这样的方法,如果定义的常量过多,可能得到所有常量的数组比较麻烦,可通过Java的反射机制得到这个类的所有常量数组:

    public static String[] values() {Field[] fields = Constants.class.getFields();String[] s = new String[fields.length];for(int i=0,n=fields.length; i<n; i++) {try {Field f = fields[i];s[i] = (String) f.get(null);} catch (Exception ex) {Logger.getLogger(Constants.class.getName()).log(Level.SEVERE, null, ex);}}return s;}

也可定义一个方便的返回Set的方法:

    public static Set<String> asSet() {return new HashSet<String>(Arrays.asList(values()));}

完整的代码,一个完整的Constants类的模板:

public class Constants {public static final String USER_HOME = "user.home";public static final String USER_DIR = "user.dir";public static final String OS_NAME = "os.name";private Constants(){}public static String[] values() {Field[] fields = Constants.class.getFields();String[] s = new String[fields.length];for(int i=0,n=fields.length; i<n; i++) {try {Field f = fields[i];s[i] = (String) f.get(null);} catch (Exception ex) {Logger.getLogger(Constants.class.getName()).log(Level.SEVERE, null, ex);}}return s;}public static Set<String> asSet() {return new HashSet<String>(Arrays.asList(values()));}public static void main(String[] args) {System.out.println("values="+Arrays.asList(values()));System.out.println("set="+asSet());}
}

常量类可通过import static导入,个人更喜欢把常量类和Utils工具类放在一块,都可以通过import static导入,然而,常量类也有一些缺陷,在编译时如果修改了常量类,编译时依赖常量类的其他类文件并不重新编译,所以在开发过程中,修改常量类后尽量先对项目进行clean,然后build,这也是不建议使用接口定义常量类的主要原因,调用接口的客户API不可能在接口重新发布时都进行编译。

Java中的Constants类相关推荐

  1. java 中常用的类

    java 中常用的类 Math Math 类,包含用于执行基本数学运算的方法 常用API 取整 l  static double abs(double  a) 获取double 的绝对值 l  sta ...

  2. Java中的BigDecimal类你真的了解吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:HikariCP www.jianshu.com/p/c81 ...

  3. Java中常用的类及其特点

    Java中的内部类有四种(内部类作用1.封装装类型. 2.直接访问外部类成员. 3.回调.)内部类,方便他们的外部类调用,一般不会被其它类使用,比如事件监听器之类的,外部类刚好继承了一个别的类,如果你 ...

  4. java中的stack类和C++中的stack类的区别

    文章目录 1 java中的stack类和C++中的stack类的区别 1.1 java中的stack类 1.2 C++中的stack类 1.3 分析 不经意间想到了这个问题,存到栈中的是对象的引用,还 ...

  5. Java 中的 BigDecimal 类你了解多少?

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:什么?你还在使用fastjson,性能太差了个人原创+1博客:点击前往,查看更多 作者:HikariCP 链接: ...

  6. 四十一、深入Java中的 File类

    @Author:Runsen @Date:2020/6/6 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  7. java中所有的类都继承于_Java中所有的类都是通过直接或间接地继承( )类得到的...

    Java中所有的类都是通过直接或间接地继承( )类得到的 答:java.lang.Object 关于主机地址 192.168.19.125 (子网掩码: 255.255.255.248 ),以下说法正 ...

  8. 带有静态方法的类(java中的math类)

    带有静态方法的类通常(虽然不一定是这样)不打算被初始化. 可以用私有构造函数来限制非抽象类被初始化. 例如,java中的math类.它让构造函数标记为私有,所以你无法创建Math的实例.但Math类却 ...

  9. Java中的StringBuilder类功能详解

    字符串是Java程序中最常用的一种数据结构之一.在Java中的String类已经重载的"+".也就是说,字符串可以直接使用"+"进行连接,如下面代码所示: St ...

  10. Java中的Runtime类详解

    Java中的Runtime类详解 1.类注释 /**Every Java application has a single instance of class Runtime that allows ...

最新文章

  1. 我竟然用OpenCV实现了卡尔曼滤波
  2. L - Subway POJ - 2502
  3. 从空军机长到大厂程序员,关系数据库之父传奇
  4. windows 下架设svn服务器(转载)
  5. IDEA Terminal命令行运行javac时,一个类运用另一个类的方法找不到符号的问题
  6. 结合JDK源码看设计模式——桥接模式
  7. python --函数
  8. 训练日志 2019.9.15
  9. Hadoop程序打印调试
  10. Qt + 运动控制 (固高运动控制卡)【3】运动控制卡几种常用的回零方式
  11. 安全基础教育第二季第1集:屡战屡败的找回密码
  12. linux网络适配器驱动程序怎么安装,如何安装网卡驱动_如何重新安装网卡驱动
  13. Excel快捷键总结
  14. ## STAMP使用中数据上传注意事项
  15. NOIP2017提高组题解(待填坑)
  16. ThinkPHP报错 The requested URL /admin/index/login.html was not found on this server.
  17. java中5 的结果_java第五次实验报告
  18. 15款android设备上的代码编辑器,超级方便!
  19. 详谈QTableWidget / QTableView
  20. FZU - 2062 - Suneast Yayamao

热门文章

  1. 『单片机原理』程序存储器的结构
  2. H5游戏开发:H5设计的方向有哪些
  3. 通过U盘安装windows简易教程
  4. Mac 判断终端是否走了代理服务器的方法
  5. The choise between Interface and Abstract Class
  6. mysql的填充因子_sql server填充因子
  7. 7.03maven和网络
  8. python opencv生成背景透明图标
  9. 摸爬滚打DirectX11_day02——VS2010+DirectX11的环境配置
  10. 【转帖】楚狂人的 DriverNetworks开发网络驱动教材(0-7课)