很多的地方建议把一个一个不变的变量使用static表明,然后所有的变量字母都是用大写来表示。
这样的优点 是在读代码的时候我们知道这个字母代表什么, 当这个字母变化的时候,我们只需要修改一个地方就可以修改所有地方了public static String GENDER_MAN = "M".
if (GENDER_MAN.equals(gender)){
...
}
大量的这种变量存在于代码里面,我们看到其实也是符合代码规范的。但是有一次写代码的时候就是觉得这样的代码不“美”。但是也不知道什么原因。而且不愿意写出大量的static代码。
(有的人可以用枚举来代替,个人觉得用枚举是比静态变量更好,但是实质上并没有改变,也已经进步不小了。)
后来自己思索以后进行了如下的重构。public boolean isGenderMan(gender){
return "M".equals(gender)
}
然后进行code review的时候大家开始表示,你这怎么行。M出现在代码里面的,hard code啊。好吧,我们来看看到底哪种写法更好。更加符合之前说的设计模式原则。
使用static 的好处有两个。上面已经说了。那么我们来看一下,这样写代码是不是已经有原来的优点了。
通过方法名字,我们可以看出M代表男性。而且M不对外开放。别的地方不能使用M。如果以后M变成其他的字母的话,也只需要修改一个地方。
那么我们看看这么写还有没有其他的好处,如果以后m也代表男性。之前的代码怎么办。我们需要在代码的每一处做出如下修改。
public static String GENDER_MAN = "M".
public static String GENDER_MAN1 = "m".
if (GENDER_MAN.equals(gender) || GENDER_MAN1 .equals(gender)){
...
}那么第二种方式,只需要修改一个地方就可以了。这样其实更负责“开闭原则”。但是“守旧的人还是会指责你,M m是硬编码。”
public boolean isGenderMan(gender){
return "M".equals(gender) || "m".equals(gender)
}
还有没有其他的优点,就是我觉得这样的代码更“美”。为什么美,我也说不出来。我就是觉得这样漂亮,比代码里面一堆常常的静态变量好看的多。
有的人说了,我们系统就是不会变,我们的性别只需要使用M,你这是在强词夺理。我觉得吧,对修改开发是一个大的原则,我们在code的时候需要考虑进去。但是需要做个平衡,也不是一味的说所有都要去修改,需要看代价。代价大了就没有必要了。如果只是把静态变量修改成方法的话,其实这样修改代码量不大。而且更负责“开闭原则”。
静态变量应该使用在什么地方呢?更加推荐表示一些真正不变的东西,比如说π,空字符串我觉得也可以使用(当然代码里面出现“”完全没有问题。)。或者使用jdk里面的一些东西。
其实写代码并没有什么大的规则,遵循你的“道”就是好的。对于前人的经验理解后再去使用。