要求解析下面字符串,得到一个对象,字符串代表一个类名和其参数 参数可能也是一个类或数组,可能需要用到嵌套算法clazz@Class{p1=v1,p2=[av21,av22],p3@Class3{p31=v31},p4=v4}请问有没有好的算法??
要求解析下面字符串,得到一个对象,字符串代表一个类名和其参数 参数可能也是一个类或数组,可能需要用到嵌套算法clazz@Class{p1=v1,p2=[av21,av22],p3@Class3{p31=v31},p4=v4}请问有没有好的算法??
调试欢乐多
其实就是用反射,前提是:
1、你的类都是POJO的
2、不能使用无类型的泛型成员,例如 List不带类型参数否则,你需要另外的方式传达类的定义相关的信息。以你的字符串为例: clazz@Class{p1=v1,p2=[av21,av22],p3@Class3{p31=v31},p4=v4}
我们可以理解成这样:
有一个全局变量,变量名=clazz,它是一个类,类名Class
clazz中包含4个成员 p1,p2 和 p3,p4
p1 是个字符串,内容是 "v1"
p2 是个字符串数组,内容是 "av21","av22"
p3 是个类对象,类名是Class3,包含一个字符串成员 p31, 值是"v31"
p4 是个字符串,内容是“v4”
理解的对不对呢?不晓得,因为不晓得你的编码规则。
假设理解基本正确,只是p1,p2,p3,p4的类型不对,可以从类的2进制代码中,根据类名和属性名获得p1p4的声明类型。
数组是可以处理的。但是如果是List,里面可以放任何类,而且jar包中没有这个信息。所以,算法什么的还不用急着考虑,仅凭这个字符串还没有足够的信息能够恢复这个对象。
因此,必须先说明编码规则,才能考虑解析算法
for each sub-ClassString in ClassString{
parse(sub-ClassString )
}
}但是估计有现成的第3方包支持这类操作。