使用 Java 反射机制将字符串转化成类内容

本文介绍如何使用 Java 反射机制将以 'key="value"' 形式呈现的字符串转化为类的属性。

示例代码

import java.lang.reflect.Field;

public class StringToClassConverter {
    public static void main(String[] args) {
        String str = "boardId='e01',sn='1',ip='192.168.76.2',netmask='255.255.255.255',productModel='E1',softwareVersion='1.0.0.1',hardwareVersion='2.0',fxsNumber='16',fxoNumber='16',e1Numbe='0',layout='layout',mac='aa:bb:cc:dd:ee:ff',supports=''";

        MyClass myClass = convertToClass(str, MyClass.class);
        System.out.println(myClass);
    }

    public static <T> T convertToClass(String str, Class<T> clazz) {
        T obj = null;
        try {
            obj = clazz.newInstance();
            String[] keyValuePairs = str.split(",");
            for (String keyValuePair : keyValuePairs) {
                String[] keyValue = keyValuePair.split("=");
                String fieldName = keyValue[0].trim();
                String fieldValue = keyValue[1].replaceAll("\"", "").trim();

                Field field = clazz.getDeclaredField(fieldName);
                field.setAccessible(true);
                Class<?> fieldType = field.getType();

                // 根据属性类型进行赋值
                if (fieldType == String.class) {
                    field.set(obj, fieldValue);
                } else if (fieldType == int.class) {
                    field.set(obj, Integer.parseInt(fieldValue));
                } else if (fieldType == double.class) {
                    field.set(obj, Double.parseDouble(fieldValue));
                } else {
                    // 其他类型的处理
                    // ...
                }
            }
        } catch (InstantiationException | IllegalAccessException | NoSuchFieldException e) {
            e.printStackTrace();
        }
        return obj;
    }
}

class MyClass {
    private String boardId;
    private String sn;
    private String ip;
    private String netmask;
    private String productModel;
    private String softwareVersion;
    private String hardwareVersion;
    private int fxsNumber;
    private int fxoNumber;
    private int e1Numbe;
    private String layout;
    private String mac;
    private String supports;

    // getter和setter方法省略

    @Override
    public String toString() {
        return "MyClass{" +
                "boardId='" + boardId + "'" +
                ", sn='" + sn + "'" +
                ", ip='" + ip + "'" +
                ", netmask='" + netmask + "'" +
                ", productModel='" + productModel + "'" +
                ", softwareVersion='" + softwareVersion + "'" +
                ", hardwareVersion='" + hardwareVersion + "'" +
                ", fxsNumber=" + fxsNumber +
                ", fxoNumber=" + fxoNumber +
                ", e1Numbe=" + e1Numbe +
                ", layout='" + layout + "'" +
                ", mac='" + mac + "'" +
                ", supports='" + supports + "'" +
                "}";
    }
}

代码解析

  1. 字符串拆分: 将字符串按照逗号 ',' 分隔成键值对数组。
  2. 键值对解析: 将每个键值对按照等号 '=' 分隔成键名和键值。
  3. 反射获取属性: 通过 clazz.getDeclaredField(fieldName) 获取类中对应键名的属性。
  4. 属性赋值: 根据属性类型进行赋值,示例中包括 String、int、double 三种类型。
  5. 其他类型处理: 可以根据需要添加其他类型的处理逻辑。

运行结果

MyClass{boardId='e01', sn='1', ip='192.168.76.2', netmask='255.255.255.255', productModel='E1', softwareVersion='1.0.0.1', hardwareVersion='2.0', fxsNumber=16, fxoNumber=16, e1Numbe=0, layout='layout', mac='aa:bb:cc:dd:ee:ff', supports=''} 

可以看到,字符串成功转化为了 MyClass 对象,并且属性值与原始字符串中的键值对一一对应。

总结

本文提供了一个使用 Java 反射机制将字符串转化为类属性的示例代码。你可以根据自己的情况修改目标类的属性以及转换逻辑。

Java 反射机制将字符串转化成类内容

原文地址: https://www.cveoy.top/t/topic/pdM6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录