I am storing a class object into a string using toString() method. Now, I want to convert the string into that class object.
你的问题很模糊.这可能意味着至少两件不同的事情,其中之一是…好的…你的一个严重的误解.
如果你这样做:
SomeClass object = ...
String s = object.toString();
那么答案是没有简单的方法把它转换成SomeClass的一个实例.即使toString()方法给你一个那些时髦的“SomeClass @ xxxxxxxx”字符串,你也无法做到这一点. (该字符串不对对象的状态进行编码,甚至不对对象的引用进行编码,xxxxxxxx部分是对象的身份哈希码,它不是唯一的,不能神奇地转回到对象的引用.)
唯一可以将toString的输出转换成对象的方式是:
>编写SomeClass.toString()方法,以便包含在其生成的String中的对象的所有相关状态,以及
>编写一个构造函数或工厂方法,它以由toString()方法生成的格式显式解析String.
这可能是一个坏的方法.当然,对于非平凡的课程来说,这是很多工作.
如果你这样做:
SomeClass object = ...
Class c = object.getClass();
String cn = c.toString();
那么你可以得到相同的Class对象(即c中的那个),如下所示:
Class c2 = Class.forName(cn);
这给了你Class,但是没有什么神奇的方式来重构原来的实例. (显然,类的名称不包含对象的状态.)
如果您正在寻找一种方法来序列化/反序列化任意对象,而无需自己编写解析/解析方法,那么您根本不应该使用toString()方法.以下是您可以使用的一些备选方案:
> Java对象序列化API,如@ Nishant答案中的链接中所述.
> @ fatnjazzy的回答中描述的JSON序列化.
> XStream的XML序列化库.
>一个ORM映射.
这些方法中的每一种都有优缺点,我不会进入这里.