如何在JAVA中定义常量?


如何在JAVA中定义常量?

文章插图
 
 
围绕JAVA中的常量主题似乎存在很多混淆 , 有的人使用整数或字符串来定义常量 , 而有的人则使用枚举 。
我还遇到了在自己的接口中定义的常量 —— 使用常量的类必须实现接口 。该策略通常被称为界面常量设计模式 。
在本文中 , 我们将介绍在Java中存储常量的两种最常见的策略: 整数和枚举 。
假设我们有一个表示在线商店中的订单的类 , 我们希望跟踪订单发生的一周中的哪一天 。
如何在JAVA中定义常量?

文章插图
 
【如何在JAVA中定义常量?】请注意 , 该类目前不会编译 - [datatype]只是我们将使用的常量类型的占位符 。
用整数定义常量在Java中定义常量的最常用方法之一是通过整数 , 其中整数变量是静态的 。
如何在JAVA中定义常量?

文章插图
 
定义整数常量时要注意的第一个问题是放置它们的位置 。我们是直接将它们直接放在Order类中?还是给他们自己的Class呢?
由于days非常普遍 , 而且不一定只连接到Order类型的对象 , 所以我们将在它们自己的类WeekDay中定义它们 。
如何在JAVA中定义常量?

文章插图
 
您可能注意到了私有构造函数——这是为了避免客户机实例化类 。该类只包含静态变量 , 这些变量不绑定到对象 , 因此不需要实例化该类 。
现在 , 每当我们需要设定某一天的订单 , 我们可以这样做:
如何在JAVA中定义常量?

文章插图
 
当我们想检查星期五的一个订单时 , 我们可以简单地调用write:
如何在JAVA中定义常量?

文章插图
 
那么 。这个设计就不会有问题了吗?
假设你一年后来看这个代码 , 要查看周一的订单 , 但你忘记了WeekDay的类 , 这时候你可以尝试这样做:
如何在JAVA中定义常量?

文章插图
 
星期一是一周的第一天 , 所以工作日应该是1 , 对吧?
但事实并非如此 , 因为静态int变量Monday在我们的工作日类中被定义为0 !
这是一个很好的例子 , 说明了为什么应该避免使用整数常量 。它们很容易出错 , 容易混淆 , 而且很难调试 。
用枚举定义常量在Java中定义常量的另一种方法是使用枚举 。
当使用枚举时 , 我们的constants类是这样的:
如何在JAVA中定义常量?

文章插图
 
注意 , 没有私有构造函数——程序员(您!)没有必要强制类是不可实例化的 , 因为枚举在默认情况下是不可实例化的!
将WeekDay设置为一个顺序的语法与整型常量完全相同:
如何在JAVA中定义常量?

文章插图
 
同样 , 我们也可以处理周五的订单:
如何在JAVA中定义常量?

文章插图
 
然而 , 关键的区别在于 , 这是在Order类中设置和比较WeekDay变量值的唯一方法 。
order.setWeekDay (1)和(order.getWeekDay() == 1)将使编译器抛出一个错误 , 因为您试图使用integer类型的变量 , 而它们应该是WeekDay类型的变量!
对于枚举 , 这不再是一个问题 。如果您试图使用整数而不是WeekDay枚举的成员 , 编译器只会抛出一个错误 , 告诉您需要使用WeekDay枚举 。
换句话说 , 唯一能帮你检查周五是否有订单的方法是:
如何在JAVA中定义常量?

文章插图
 
您不再需要记住constants类 , 如果有客户端要使用您的代码 , 他们也不必担心 。
希望这个例子向您展示了为什么在定义常量时应该始终优先使用枚举而不是整数 。枚举将使您的代码更不容易出错、更易于阅读和更易于维护!
如果在JAVA学习上遇见不会的 , 或者想学Java的 , 私信我交流!


推荐阅读