管理代码里常量的方法是什么(apache,java,编程语言)

时间:2024-04-29 00:08:45 作者 : 石家庄SEO 分类 : 编程语言
  • TAG :

    %E7%AE%A1%E7%90%86%E4%BB%A3%E7%A0%81%E9%87%8C%E5%B8%B8%E9%87%8F%E7%9A%84%E6%96%B9%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88

从事Web开发,有个绕不开的常量就是HTTP的状态码,不如以此为起点

①使用枚举

类中定义常量

final类中定义常量

以上都是在常用开源框架中的定义,在业务中还曾见过一种用法,是

在接口中定义常量

这种接口被称为常量接口,不过在《Effective Java》中的“接口只用于定义类型”这条建议中,特别批评了这种常量接口,认为“常量接口模式是对接口的不良使用”。原文叙述如下:

考虑到常量类不应该被继承,使用final要比没有合适。

此外考虑到常量类应该不需要被实例化,将构造函数设置为private也是种额外的保护。

综上,使用枚举final常量类就是首选了,那么这两者之间又如何抉择呢?我们还是能从《Effective Java》得到有效的建议,第34条中就是在建议我们用枚举替代int常量。

虽然枚举是首选,但是常量类不会消失,常量不只是int常量,字符串常量也是日常开发中避不开的,而且有些时候我们还是会觉得常量更为便捷。那该如何管理这些常量呢?

把程序中所有用到的常量,都集中放到一个Constants类中。这样做会有一些缺点,

为了增加常量会导致这个类的修改会很频繁

依赖这个常量类的代码会很多

为了使用某一个常量,会导致引入很多无关的常量

作为职场新人的时候,我常干的一件事情就是重复定义常量,因为我不知道别人是否定义过,在哪里定义过,与其要翻遍整个代码库去找这个常量,自己定义一个显得方便的多。

直到有一天我需要去修改一个常量的定义,前面欠下的债就需要还了。重复代码最大的问题就是,当你需要去修改或者维护那段重复的代码的时候,你需要去修改每一处,如果有遗漏,那就是bug了。重复常量也是如此。

一个思路是按功能维度,去定义常量,一个常量类只跟某一功能相关。

如MySQLConstants、RedisConstants。

但这个有个很虚的概念,就是功能,一个功能可大可小,范畴可以是某一个类,也可以是一整个模块,这里没有定论,依赖的就是程序员聪明的头脑和丰富的经验了。

另外一种思路就是不单独设计常量类,常量在哪个类里面使用,就把常量定义到这个类中。

比如在RedisClient和RedisConfig中都用到了之前RedisConstants中的常量,可以将其分别定义在RedisClient和RedisConfig中。

但这样做有个明显的问题就是,如果多个类用到了同一个常量,如果各自定义就造成了重复,如果定义一份声明为public,就会造成两个类之间的依赖。这样来看,在没有复用诉求的情况下,就地定义才比较可取。

上述两种方式都没有完整的解决我们的疑惑,考虑将上述两种方式结合起来,可以得到一种按层次定义复用的方式。

跨应用复用常量:放置在二方库中,通常是client.jar中的constant目录下。

应用内复用常量:放置在一方库中,通常是common中的constant目录下。

模块内部复用常量:即在当前子工程的constant目录下。

包内复用常量:即在当前包下单独的constant目录下。

类内复用常量:直接在类内部private static final定义。

本文:管理代码里常量的方法是什么的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Python函数的基本用法下一篇:

2 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18