Java 反射机制将字符串转化成类内容
使用 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 + "'" +
"}";
}
}
代码解析
- 字符串拆分: 将字符串按照逗号 ',' 分隔成键值对数组。
- 键值对解析: 将每个键值对按照等号 '=' 分隔成键名和键值。
- 反射获取属性: 通过
clazz.getDeclaredField(fieldName)获取类中对应键名的属性。 - 属性赋值: 根据属性类型进行赋值,示例中包括 String、int、double 三种类型。
- 其他类型处理: 可以根据需要添加其他类型的处理逻辑。
运行结果
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 反射机制将字符串转化为类属性的示例代码。你可以根据自己的情况修改目标类的属性以及转换逻辑。
原文地址: https://www.cveoy.top/t/topic/pdM6 著作权归作者所有。请勿转载和采集!