魔法值的定义

未经定义的常量叫做魔法值,通常是指在代码编写时莫名出现的数字,无法直接判断数值代表的含义,必须通过联系代码上下文分析才可以明白,严重降低了代码的可读性,例如在下图中的32都是魔法值

image-20240308123316494

解决办法

下面代码的用户身份有三种:1代表管理员、2代表房东、3代表租户,即在数据库中只存储1、2、3,不存储实际的含义,如果想知道从数据库查询到的用户身份就会出现魔法值了,例如想知道用户身份是不是管理员就需要判断user.getType()==1,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;
  2. 使用

    1
    2
    3
    4
    5
    public static void main(String[] args) {
    System.out.println(USER_TYPE_ADMINISTRATOR);
    System.out.println(USER_TYPE_LANDLORD);
    System.out.println(USER_TYPE_TENANT);
    }
  3. 运行结果

    image-20240308125254226

使用枚举类

如果要在IntelliJ IDEA中创建一个文件夹存放枚举类,那么该文件夹名称不能是enum,否则无法在该文件夹内创建枚举类(普通类也不行),建议把文件夹的名称命名为enums

  1. 创建枚举类

    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
    62
    package 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;
    }
    }
  2. 使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public 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());
    }
  3. 运行结果

    image-20240308125310395