Java 将字符串值转换为类型

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(); 看一看

假设我有一个对象,我将它的所有属性存储为纯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();

将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
类的所有方法