解决Java代码中的魔法值
魔法值的定义
未经定义的常量叫做魔法值,通常是指在代码编写时莫名出现的数字,无法直接判断数值代表的含义,必须通过联系代码上下文分析才可以明白,严重降低了代码的可读性,例如在下图中的3
和2
都是魔法值
解决办法
下面代码的用户身份有三种:1代表管理员、2代表房东、3代表租户,即在数据库中只存储1、2、3,不存储实际的含义,如果想知道从数据库查询到的用户身份就会出现魔法值了,例如想知道用户身份是不是管理员就需要判断user.getType()==1
,1就是魔法值
要消除魔法值可以定义静态常量,也可以使用枚举类,建议使用枚举类更加方便管理
定义静态常量
定义,如果想定义一次可以在多个类中使用,那么请将下面代码中的
private
关键词修改为public
,其它类想使用下面的静态常量需要先import
导入(根据IntelliJ IDEA的提示导入即可)1
2
3
4
5
6
7
8
9
10
11
12/**
* 管理员
*/
private final static int USER_TYPE_ADMINISTRATOR = 1;
/**
* 房东
*/
private final static int USER_TYPE_LANDLORD = 2;
/**
* 租户
*/
private final static int USER_TYPE_TENANT = 3;使用
1
2
3
4
5public static void main(String[] args) {
System.out.println(USER_TYPE_ADMINISTRATOR);
System.out.println(USER_TYPE_LANDLORD);
System.out.println(USER_TYPE_TENANT);
}运行结果
使用枚举类
如果要在IntelliJ IDEA中创建一个文件夹存放枚举类,那么该文件夹名称不能是enum
,否则无法在该文件夹内创建枚举类(普通类也不行),建议把文件夹的名称命名为enums
创建枚举类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62package com.ltx.enums;
/**
* 用户类型
*
* @author LeDao
* @company
* @createDate 2024-03-08 12:10
*/
public enum UserType {
/**
* 管理员
*/
Administrator(1, "管理员"),
/**
* 房东
*/
Landlord(2, "房东"),
/**
* 租户
*/
Tenant(3, "租户");
/**
* 状态码
*/
private final int code;
/**
* 描述
*/
private final String description;
/**
* 构造方法
*
* @param code
* @param description
*/
UserType(int code, String description) {
this.code = code;
this.description = description;
}
/**
* 获取状态码
*
* @return
*/
public int getCode() {
return code;
}
/**
* 获取描述
*
* @return
*/
public String getDescription() {
return description;
}
}使用
1
2
3
4
5
6
7
8
9
10
11public static void main(String[] args) {
UserType userType1 = UserType.Administrator;
System.out.println(userType1.getCode());
System.out.println(userType1.getDescription());
UserType userType2 = UserType.Landlord;
System.out.println(userType2.getCode());
System.out.println(userType2.getDescription());
UserType userType3 = UserType.Tenant;
System.out.println(userType3.getCode());
System.out.println(userType3.getDescription());
}运行结果
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LeDao's Blog!
评论