Java | Use la reflexión para convertir valores de atributo en la enumeración Enum

common wx: CodingTechWork, aprender y progresar juntos.

necesidad

  Durante el proceso de desarrollo, a veces es necesario convertir un valor de atributo de campo en otro valor de atributo de campo en cada clase de enumeración, como realizar una visualización frontal de acuerdo con el requisito de convertir código en nombre. Este artículo resume cómo asignar valores de atributos de enumeración entre sí de manera simple e inteligente a través de la reflexión.

práctica

clase de enumeración

package com.test.selfcoding;

/**
 * @Description TODO
 * @Author LiaoJy
 * @Date 2023/6/18
 */
public enum ColourEnum {
    
    

    /**
     * 红色
     */
    RED(1, "红色"),
    /**
     * 黄色
     */
    YELLOW(2, "黄色"),
    /**
     * 绿色
     */
    GREEN(3, "绿色");

    private Integer code;
    private String desc;

    ColourEnum(Integer code, String desc) {
    
    
        this.code = code;
        this.desc = desc;
    }

    public Integer getCode() {
    
    
        return code;
    }

    public String getDesc() {
    
    
        return desc;
    }

    public static String getDesc(Integer code) {
    
    
        for (ColourEnum c : ColourEnum.values()) {
    
    
            if (c.code.intValue() == code.intValue()) {
    
    
                return c.getDesc();
            }
        }
        return null;
    }

    public static Integer getCode(String desc) {
    
    
        for (ColourEnum c : ColourEnum.values()) {
    
    
            if (c.desc.equals(desc)) {
    
    
                return c.getCode();
            }
        }
        return null;
    }

    public static ColourEnum getEnum(Integer code) {
    
    
        if (code == null) {
    
    
            return null;
        }
        for (ColourEnum c : ColourEnum.values()) {
    
    
            if (c.code.intValue() == code.intValue()) {
    
    
                return c;
            }
        }
        return null;
    }

}

clase de prueba de reflexión


package com.test.selfcoding.service;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * @Description
 * @Author LiaoJy
 * @Date 2023/6/18
 */
public class EnumReflectServiceTest {
    
    

    public static void main(String[] args) throws NoSuchFieldException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
    
    
        String codeValue = "1";
        String descValue = "黄色";
        Class<Enum> clazz = (Class<Enum>) Class.forName("com.test.selfcoding.ColourEnum");
        if (Integer.class.equals(clazz.getDeclaredField("code").getType())) {
    
    
            Method method = clazz.getMethod("getDesc", Integer.class);
            String result = (String)  method.invoke(clazz, Integer.parseInt(codeValue));
            System.out.println("颜色描述:" + result);
        }

        if (String.class.equals(clazz.getDeclaredField("desc").getType())) {
    
    
            Method method = clazz.getMethod("getCode", String.class);
            Integer result = (Integer)  method.invoke(clazz, descValue);
            System.out.println("颜色编码:" + result);
        }
    }

}

resultado de la operación

颜色描述:红色
颜色编码:2

Supongo que te gusta

Origin blog.csdn.net/Andya_net/article/details/131415381
Recomendado
Clasificación