我正在查看谷歌提供的以下Gson库。在我关注的教程中,我找到了以下代码片段;
public class JsonToJava {
public static void main(String[] args) throws IOException {
try(Reader reader = new InputStreamReader(JsonToJava.class.getResourceAsStream("/Server1.json"), "UTF-8")){
Gson gson = new GsonBuilder().create();
Person p = gson.fromJson(reader, Person.class);
System.out.println(p);
}
}
}
是否可以使这种通用,例如,如果您有以下参数
public Object getObjectFromJSONString(String jsonString, Class classType){
然后我们知道类类型,是否可以返回任何对象类型或者我必须有单独的方法,convertJSONToClassA,convertJSONToClassB,convertJSONToClassC等等?
答案 0 :(得分:1)
返回classType
的泛型类型参数。如果您使用Class<String>
调用它,则会返回String
等等...
public <T> T getObjectFromJSONString(String jsonString, Class<T> classType) {
// Your code here
}
这正是Gson#fromJson(String, Class)
的实施所做的。
答案 1 :(得分:1)
我认为以下是您想要的
public <T> T getObjectFromJSONString(String jsonString, Class<T> classType) {
该方法仍然执行相同的操作但现在不是总是返回Object
的实例,而是返回您将其作为参数传递给它的任何类的实例。
答案 2 :(得分:1)
查看Gson的源文件(https://code.google.com/p/google-gson/source/browse/trunk/gson/src/main/java/com/google/gson/Gson.java) fromJson的方法可以根据需要进行参数化。
public <T> T fromJson(String json, Class<T> classOfT)
答案 3 :(得分:0)
fromJson(Reader reader, Class classType);
此方法实际上采用您需要的任何对象类型,并将您的json转换为它。
public <T> T convertJsonToJava(Reader reader, Class<T> clazz ) {
T javaObject = null; // Declare the intended object to return
Gson gson = new GsonBuilder().create(); // Create a Gson instance
javaObject = gson.fromJson(reader, clazz); // Get your object from Json
return javaObject ; // Return your object
}
答案 4 :(得分:0)
您不能使用classType参数。
java的泛型机制只能通过参数类型而不是值来解析泛型方法。
你可以做什么,假设你的Json对象有一个默认构造函数(大多数都是) 实际实例化一个对象参数,以便它可以用作泛型解析器的提示。像这样:
Person p = readJson(reader, new Person());
Car c = readJson(reader, new Car());
House h = readJson(reader, new ());
其中:
public <T> T readJson(Reader reader, Object obj) {
return gson.fromJson(reader, obj.getClass());
}