将String转换为Class对象

and*_*Guy 24 java string object

我正在使用toString()方法将类对象存储到字符串中.现在,我想将字符串转换为该类对象.

怎么做?请帮我一下源代码.

Ste*_*n C 27

我使用toString()方法将类对象存储到字符串中.现在,我想将字符串转换为该类对象.

你的问题很模糊.它可能意味着至少两件不同的事情,其中​​之一就是......嗯......你这是一个严重的误解.


如果你这样做:

SomeClass object = ...
String s = object.toString();
Run Code Online (Sandbox Code Playgroud)

那么答案就是没有简单的方法可以s转回一个实例SomeClass.即使该toString()方法给你一个时髦的"SomeClass @ xxxxxxxx"字符串,你也无法做到.(该字符串不编码对象的状态,甚至不编码对象的引用.xxxxxxxx部分是对象的标识哈希码.它不是唯一的,不能神奇地转回到对象的引用.)

将输出的输出toString转换为对象的唯一方法是:

  • SomeClass.toString()方法进行编码,以便在其生成的String中包含对象的所有相关状态,以及
  • 编码以该toString()方法生成的格式显式解析String的构造函数或工厂方法.

这可能是一个糟糕的方法.当然,要为非平凡的课程做这件事需要做很多工作.


如果你做了这样的事情:

SomeClass object = ...
Class c = object.getClass();
String cn = c.toString();
Run Code Online (Sandbox Code Playgroud)

然后你可以得到相同的Class对象(即所在的对象c),如下所示:

Class c2 = Class.forName(cn);
Run Code Online (Sandbox Code Playgroud)

这给了你Class但没有神奇的方法来重建使用它的原始实例.(显然,类的名称不包含对象的状态.)


如果您正在寻找一种序列化/反序列化任意对象的方法而不需要自己编写unparse/parse方法,那么您根本就不应该使用toString()方法.以下是您可以使用的一些替代方案:

  • Java对象序列化API,如@Nishant的答案中的链接所述.
  • @ fatnjazzy的回答中描述的JSON序列化.
  • 像XStream这样的XML序列化库.
  • ORM映射.

这些方法中的每一种都有优点和缺点......我不会在这里讨论.


小智 18

更简单的方法:您需要com.google.gson.Gson将对象转换为json字符串以进行流式处理

将对象转换为json字符串,以便在代码下方使用流

Gson gson = new Gson();
String jsonString = gson.toJson(MyObject);
Run Code Online (Sandbox Code Playgroud)

要将json字符串转换回对象,请使用以下代码:

Gson gson = new Gson();
MyObject = gson.fromJson(decodedString , MyObjectClass.class);
Run Code Online (Sandbox Code Playgroud)

在另一方面转换对象以进行流式传输和读取的更容易的方法.希望这可以帮助. - 维施什


Tur*_*oes 6

Class.forName(nameString).newInstance();
Run Code Online (Sandbox Code Playgroud)

  • 没有downvoting,但似乎OP希望_save_ object(带状态)为String,然后转换回具有相同状态的对象.`forName`加载类并为您提供`Class`对象而不是类的实例.http://download.oracle.com/javase/6/docs/api/java/lang/Class.html#forName%28java.lang.String%29 (3认同)