我使用 toString() 方法将类对象存储到字符串中。现在,我想将字符串转换为该类对象。
你的问题含糊不清。它可能意味着至少两种不同的事情,其中之一是……嗯……你的严重误解。
如果你这样做:
SomeClass object = ...
String s = object.toString();
那么答案就是没有简单的方法可以转s
回到一个实例SomeClass
。即使toString()
方法给了你那些时髦的“SomeClass@xxxxxxx”字符串之一。 (该字符串不会对对象的状态进行编码,甚至不会对对象的引用进行编码。xxxxxxxx 部分是对象的身份哈希码。它不是唯一的,并且不能神奇地转回对该对象的引用。)
你可以改变输出的唯一方法toString
回到一个对象将是:
- 编码
SomeClass.toString()
方法,以便在它生成的字符串中包含该对象的所有相关状态,并且
- 编写一个构造函数或工厂方法,以显式解析字符串生成的格式
toString()
method.
这可能是一个糟糕的方法。当然,对于不平凡的类来说,这样做需要做很多工作。
如果你做了这样的事情:
SomeClass object = ...
Class c = object.getClass();
String cn = c.toString();
那么你可以得到同样的Class
对象返回(即位于c
) 如下:
Class c2 = Class.forName(cn);
这给你Class
但没有什么神奇的方法可以使用它来重建原始实例。 (显然,类的名称不包含对象的状态。)
如果您正在寻找一种序列化/反序列化任意对象的方法without自己编写 unparse / parse 方法,然后你不应该正在使用toString()
根本没有方法。以下是您可以使用的一些替代方案:
- Java 对象序列化 API,如 @Nishant 答案中的链接所述。
- JSON 序列化如 @fatnjazzy 的答案中所述。
- 像 XStream 这样的 XML 序列化库。
- ORM 映射。
这些方法中的每一种都有优点和缺点......我不会在这里讨论。