Java如何通过类<;ArrayList<;T>&燃气轮机;要什么方法?
我得到了Json字符串,我想创建一个通用方法来将Json字符串转换为对象。 我创建对象Java如何通过类<;ArrayList<;T>&燃气轮机;要什么方法?,java,generics,gson,Java,Generics,Gson,我得到了Json字符串,我想创建一个通用方法来将Json字符串转换为对象。 我创建对象 public class ResponseMessage<T> { private T result; private ResultCode resultCode; private String details; public ResponseMessage(T result, ResultCode resultCode, String details) {
public class ResponseMessage<T> {
private T result;
private ResultCode resultCode;
private String details;
public ResponseMessage(T result, ResultCode resultCode, String details) {
this.result = result;
this.resultCode = resultCode;
this.details = details;
}
public T getResult() {
return result;
}
public void setResult(T result) {
this.result = result;
}
public ResultCode getResultCode() {
return resultCode;
}
public void setResultCode(ResultCode resultCode) {
this.resultCode = resultCode;
}
public String getDetails() {
return details;
}
public void setDetails(String details) {
this.details = details;
}
}
我试过了
String s = RESTUtil.doPost(url, formData);
ResponseMessage<ArrayList<CallDetail>> model = Converter.me().getModel(s, ResponseMessage<ArrayList<CallDetail>>.class);
请参阅此处的文档: 基本上,您可以使用JSONObject类。它可以将字符串作为输入,并转换为JSONObject的object
您可以使用此对象从JSON结构中获取单个元素(值) 请参阅此处的文档: 基本上,您可以使用JSONObject类。它可以将字符串作为输入,并转换为JSONObject的object 您可以使用此对象从JSON结构中获取单个元素(值) 我创建了一个,它本质上是一个包含解决方案的简短示例。请注意内联注释 请注意,我们已将MyClass的边界限制为扩展列表类
package com.so34985191;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.List;
/**
* Solution for SO question 34985191
*/
public class GsonTest {
public static void main(String args[]) {
Converter converter = new Converter();
List<Integer> sampleList1 = Arrays.asList(new Integer[] {1, 2, 3});
List<Integer> sampleList2 = Arrays.asList(new Integer[] {5, 6, 7});
@SuppressWarnings({"rawtypes"})
MyClass[] test = {
new MyClass<List<Integer>, Integer>(sampleList1),
new MyClass<List<Integer>, Integer>(sampleList2)};
Gson gs = new Gson();
String jsonEncodedString = gs.toJson(test);
// Example where the type is provided to the getModelList method
Type listType = new TypeToken<MyClass<List<Integer>, Integer>[]>() {}.getType();
System.out.println(converter.getModelList(jsonEncodedString, listType));
// Trying with another example.
Type nameType = new TypeToken<Test[]>() {}.getType();
System.out.println(converter.getModelList(
gs.toJson(new Test[] {new Test("Java"), new Test("Scala")}), nameType));
}
/**
*
* Utility class to convert a json encoded strings to respective types.
*/
public static class Converter {
/**
* Converts the encoded json string to respective type depeding on the provided type parameter
* @param jsonStr the string to be decoded.
* @param type the type used for conversion
* @return the decoded list
*/
public <T> List<T> getModelList(String jsonStr, Type type) {
T[] yourClassList = new Gson().fromJson(jsonStr, type);
return Arrays.asList(yourClassList);
}
}
/**
* Container for a list of ids.
* @param <E>
*/
public static class MyClass<T extends List<E>, E> {
private final T ids;
public MyClass(T ids) {
this.ids = ids;
}
public T getId() {
return this.ids;
}
@Override
public String toString() {
return this.ids.toString();
}
}
/**
* A sample wrapper over string.
*/
public static class Test {
private final String name;
public Test(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
@Override
public String toString() {
return this.name;
}
}
}
package com.so34985191;
导入com.google.gson.gson;
导入com.google.gson.reflect.TypeToken;
导入java.lang.reflect.Type;
导入java.util.array;
导入java.util.List;
/**
*SO问题的解决方案34985191
*/
公共类GsonTest{
公共静态void main(字符串参数[]){
转换器=新转换器();
List sampleList1=Arrays.asList(新整数[]{1,2,3});
List sampleList2=Arrays.asList(新整数[]{5,6,7});
@SuppressWarnings({“rawtypes”})
MyClass[]测试={
新MyClass(样本列表1),
新MyClass(sampleList2)};
Gson gs=新的Gson();
字符串jsonEncodedString=gs.toJson(test);
//向getModelList方法提供类型的示例
类型listType=newTypeToken(){}.getType();
System.out.println(converter.getModelList(jsonEncodedString,listType));
//尝试另一个例子。
类型nameType=newTypeToken(){}.getType();
System.out.println(converter.getModelList(
toJson(newtest[]{newtest(“Java”)、newtest(“Scala”)})、nameType);
}
/**
*
*实用程序类将json编码的字符串转换为相应的类型。
*/
公共静态类转换器{
/**
*根据提供的类型参数,将编码的json字符串转换为相应的类型
*@param jsonStr要解码的字符串。
*@param type用于转换的类型
*@返回解码列表
*/
公共列表getModelList(字符串jsonStr,类型){
T[]yourClassList=new Gson().fromJson(jsonStr,type);
返回Arrays.asList(yourClassList);
}
}
/**
*用于ID列表的容器。
*@param
*/
公共静态类MyClass{
私人最终身份证;
公共MyClass(MyT ID){
this.ids=ids;
}
公共T getId(){
返回这个.ids;
}
@凌驾
公共字符串toString(){
返回此.ids.toString();
}
}
/**
*字符串上的示例包装器。
*/
公共静态类测试{
私有最终字符串名;
公共测试(字符串名称){
this.name=名称;
}
公共字符串getName(){
返回此.name;
}
@凌驾
公共字符串toString(){
返回此.name;
}
}
}
我创建了一个,它本质上是一个简短的包含解决方案的示例。请注意内联注释
请注意,我们已将MyClass的边界限制为扩展列表类
package com.so34985191;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.List;
/**
* Solution for SO question 34985191
*/
public class GsonTest {
public static void main(String args[]) {
Converter converter = new Converter();
List<Integer> sampleList1 = Arrays.asList(new Integer[] {1, 2, 3});
List<Integer> sampleList2 = Arrays.asList(new Integer[] {5, 6, 7});
@SuppressWarnings({"rawtypes"})
MyClass[] test = {
new MyClass<List<Integer>, Integer>(sampleList1),
new MyClass<List<Integer>, Integer>(sampleList2)};
Gson gs = new Gson();
String jsonEncodedString = gs.toJson(test);
// Example where the type is provided to the getModelList method
Type listType = new TypeToken<MyClass<List<Integer>, Integer>[]>() {}.getType();
System.out.println(converter.getModelList(jsonEncodedString, listType));
// Trying with another example.
Type nameType = new TypeToken<Test[]>() {}.getType();
System.out.println(converter.getModelList(
gs.toJson(new Test[] {new Test("Java"), new Test("Scala")}), nameType));
}
/**
*
* Utility class to convert a json encoded strings to respective types.
*/
public static class Converter {
/**
* Converts the encoded json string to respective type depeding on the provided type parameter
* @param jsonStr the string to be decoded.
* @param type the type used for conversion
* @return the decoded list
*/
public <T> List<T> getModelList(String jsonStr, Type type) {
T[] yourClassList = new Gson().fromJson(jsonStr, type);
return Arrays.asList(yourClassList);
}
}
/**
* Container for a list of ids.
* @param <E>
*/
public static class MyClass<T extends List<E>, E> {
private final T ids;
public MyClass(T ids) {
this.ids = ids;
}
public T getId() {
return this.ids;
}
@Override
public String toString() {
return this.ids.toString();
}
}
/**
* A sample wrapper over string.
*/
public static class Test {
private final String name;
public Test(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
@Override
public String toString() {
return this.name;
}
}
}
package com.so34985191;
导入com.google.gson.gson;
导入com.google.gson.reflect.TypeToken;
导入java.lang.reflect.Type;
导入java.util.array;
导入java.util.List;
/**
*SO问题的解决方案34985191
*/
公共类GsonTest{
公共静态void main(字符串参数[]){
转换器=新转换器();
List sampleList1=Arrays.asList(新整数[]{1,2,3});
List sampleList2=Arrays.asList(新整数[]{5,6,7});
@SuppressWarnings({“rawtypes”})
MyClass[]测试={
新MyClass(样本列表1),
新MyClass(sampleList2)};
Gson gs=新的Gson();
字符串jsonEncodedString=gs.toJson(test);
//向getModelList方法提供类型的示例
类型listType=newTypeToken(){}.getType();
System.out.println(converter.getModelList(jsonEncodedString,listType));
//尝试另一个例子。
类型nameType=newTypeToken(){}.getType();
System.out.println(converter.getModelList(
toJson(newtest[]{newtest(“Java”)、newtest(“Scala”)})、nameType);
}
/**
*
*实用程序类将json编码的字符串转换为相应的类型。
*/
公共静态类转换器{
/**
*根据提供的类型参数,将编码的json字符串转换为相应的类型
*@param jsonStr要解码的字符串。
*@param type用于转换的类型
*@返回解码列表
*/
公共列表getModelList(字符串jsonStr,类型){
T[]yourClassList=new Gson().fromJson(jsonStr,type);
返回Arrays.asList(yourClassList);
}
}
/**
*用于ID列表的容器。
*@param
*/
公共静态类MyClass{
私人最终身份证;
公共MyClass(MyT ID){
this.ids=ids;
}
公共T getId(){
返回这个.ids;
}
@凌驾
公共字符串toString(){
返回此.ids.toString();
}
}
/**
*字符串上的示例包装器。
*/
公共静态类测试{
私有最终字符串名;
公共测试(字符串名称){
this.name=名称;
}
公共字符串getName(){
返回此.name;
}
@凌驾
公共字符串toString(){
返回此.name;
}
}
}
正如文档中所解释的:使用TypeToken:您已经有了一个JSONObject类。。为什么要创建另一个方法来将JSON字符串转换为对象?在这里检查文档:正如文档中所解释的:使用TypeToken:您已经有了一个JSONObject类。。你为什么要制造另一种冰毒
package com.so34985191;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.List;
/**
* Solution for SO question 34985191
*/
public class GsonTest {
public static void main(String args[]) {
Converter converter = new Converter();
List<Integer> sampleList1 = Arrays.asList(new Integer[] {1, 2, 3});
List<Integer> sampleList2 = Arrays.asList(new Integer[] {5, 6, 7});
@SuppressWarnings({"rawtypes"})
MyClass[] test = {
new MyClass<List<Integer>, Integer>(sampleList1),
new MyClass<List<Integer>, Integer>(sampleList2)};
Gson gs = new Gson();
String jsonEncodedString = gs.toJson(test);
// Example where the type is provided to the getModelList method
Type listType = new TypeToken<MyClass<List<Integer>, Integer>[]>() {}.getType();
System.out.println(converter.getModelList(jsonEncodedString, listType));
// Trying with another example.
Type nameType = new TypeToken<Test[]>() {}.getType();
System.out.println(converter.getModelList(
gs.toJson(new Test[] {new Test("Java"), new Test("Scala")}), nameType));
}
/**
*
* Utility class to convert a json encoded strings to respective types.
*/
public static class Converter {
/**
* Converts the encoded json string to respective type depeding on the provided type parameter
* @param jsonStr the string to be decoded.
* @param type the type used for conversion
* @return the decoded list
*/
public <T> List<T> getModelList(String jsonStr, Type type) {
T[] yourClassList = new Gson().fromJson(jsonStr, type);
return Arrays.asList(yourClassList);
}
}
/**
* Container for a list of ids.
* @param <E>
*/
public static class MyClass<T extends List<E>, E> {
private final T ids;
public MyClass(T ids) {
this.ids = ids;
}
public T getId() {
return this.ids;
}
@Override
public String toString() {
return this.ids.toString();
}
}
/**
* A sample wrapper over string.
*/
public static class Test {
private final String name;
public Test(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
@Override
public String toString() {
return this.name;
}
}
}