Java 将字符串值转换为类型
假设我有一个对象,我将它的所有属性存储为纯JSON。有没有一种方法可以存储.getClass()值,以便能够检索它并获取原始对象 例: 由于这可能是一个有点宽泛的问题,我将接受一个答案,它只告诉我上面的内容(如果你愿意的话,这是一个搜索词) 看一看,然后 代码可能类似(未测试):Java 将字符串值转换为类型,java,json,parsing,generics,gson,Java,Json,Parsing,Generics,Gson,假设我有一个对象,我将它的所有属性存储为纯JSON。有没有一种方法可以存储.getClass()值,以便能够检索它并获取原始对象 例: 由于这可能是一个有点宽泛的问题,我将接受一个答案,它只告诉我上面的内容(如果你愿意的话,这是一个搜索词) 看一看,然后 代码可能类似(未测试): String className=foo.geClass().getName(); Class cls=Class.forName(className); 对象newFoo=cls.newInstance(); 看一看
String className=foo.geClass().getName();
Class cls=Class.forName(className);
对象newFoo=cls.newInstance();
看一看,然后
代码可能类似(未测试):
String className=foo.geClass().getName();
Class cls=Class.forName(className);
对象newFoo=cls.newInstance();
将Java对象转换为JSON
ObjectMapper mapper = new ObjectMapper();
Staff obj = new Staff();
//Object to JSON in file
mapper.writeValue(new File("c:\\file.json"), obj);
//Object to JSON in String
String jsonInString = mapper.writeValueAsString(obj);
将JSON转换为Java对象
ObjectMapper mapper = new ObjectMapper();
String jsonInString = "{'name' : 'mkyong'}";
//JSON from file to Object
Staff obj = mapper.readValue(new File("c:\\file.json"), Staff.class);
//JSON from URL to Object
Staff obj = mapper.readValue(new URL("http://mkyong.com/api/staff.json"), Staff.class);
//JSON from String to Object
Staff obj = mapper.readValue(jsonInString, Staff.class);
将Java对象转换为JSON
ObjectMapper mapper = new ObjectMapper();
Staff obj = new Staff();
//Object to JSON in file
mapper.writeValue(new File("c:\\file.json"), obj);
//Object to JSON in String
String jsonInString = mapper.writeValueAsString(obj);
将JSON转换为Java对象
ObjectMapper mapper = new ObjectMapper();
String jsonInString = "{'name' : 'mkyong'}";
//JSON from file to Object
Staff obj = mapper.readValue(new File("c:\\file.json"), Staff.class);
//JSON from URL to Object
Staff obj = mapper.readValue(new URL("http://mkyong.com/api/staff.json"), Staff.class);
//JSON from String to Object
Staff obj = mapper.readValue(jsonInString, Staff.class);
您可以使用
instanceof
操作符创建新创建的对象并将其强制转换为foo
foo demo = new foo();
demo.classType = demo.getClass().toString();
foo demo2 = null;
OtherClass demo3 = null;
Class<?> clas=Class.forName(demo.getClass().getName());
Object obj= clas.newInstance();
if (obj instanceof foo) {
demo2=(foo)obj;
}else if (obj instanceof OtherClass) {
demo3=(OtherClass)obj;
}
foo demo=newfoo();
demo.classType=demo.getClass().toString();
foo-demo2=null;
OtherClass demo3=null;
clas=Class.forName(demo.getClass().getName());
Object obj=clas.newInstance();
if(foo的obj实例){
demo2=(foo)obj;
}else if(OtherClass的obj实例){
demo3=(其他类)obj;
}
注意:请确保如果您使用多个else if then添加子类条件,并在子类之后添加子类和超类,是的,您还需要添加try catch块您可以使用
instanceof
操作符创建新创建的对象并将其强制转换到foo
foo demo = new foo();
demo.classType = demo.getClass().toString();
foo demo2 = null;
OtherClass demo3 = null;
Class<?> clas=Class.forName(demo.getClass().getName());
Object obj= clas.newInstance();
if (obj instanceof foo) {
demo2=(foo)obj;
}else if (obj instanceof OtherClass) {
demo3=(OtherClass)obj;
}
foo demo=newfoo();
demo.classType=demo.getClass().toString();
foo-demo2=null;
OtherClass demo3=null;
clas=Class.forName(demo.getClass().getName());
Object obj=clas.newInstance();
if(foo的obj实例){
demo2=(foo)obj;
}else if(OtherClass的obj实例){
demo3=(其他类)obj;
}
注意:请确保如果您使用多个else if then add sub classes condition on top和super classes after sub classes,并且您也需要添加try catch block是否只是尝试在进程之间/通过网络传递对象?您是否考虑过使对象可序列化?它作为响应对象的一部分(作为有效负载)传递,因此我认为我不能使用可序列化。对有效负载使用
Serializable
没有本质上的错误(尽管有很多痛点使其不受欢迎);是Google解决这个问题的方法,如果你需要坚持使用JSON,它是另一个有用的工具。你只是想在进程之间/通过网络传递一个对象吗?您是否考虑过使对象可序列化?它作为响应对象的一部分(作为有效负载)传递,因此我认为我不能使用可序列化。对有效负载使用Serializable
没有本质上的错误(尽管有很多痛点使其不受欢迎);是Google解决这个问题的方法,如果你需要坚持使用JSON,它是另一个有用的工具;有没有办法进一步简化?例:clas demo2=(clas)obj;要使用某个类的特定函数,必须使用向下转换。您可以直接使用大小写,但如果存在覆盖不确定性的条件,则可以使用,因为让我们假设clas.newInstance()
返回一个bar
和foo demo2=(foo)obj
是一个错误,另一种方法是使用越来越多的反射来查找和调用foo
类的所有方法。对于许多类,我将有许多if子句都做类似的事情,意思是demo3=(OtherClass)obj;有没有办法进一步简化?例:clas demo2=(clas)obj;要使用某个类的特定函数,必须使用向下转换。您可以直接使用大小写,但如果存在覆盖不确定性的条件,则,因为让我们假设clas.newInstance()
返回一个bar
,而foo demo2=(foo)obj
是一个错误,另一种方法是使用越来越多的反射来查找和调用foo
类的所有方法