Java如何通过类<;ArrayList<;T>&燃气轮机;要什么方法?

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) {

我得到了Json字符串,我想创建一个通用方法来将Json字符串转换为对象。 我创建对象

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;
    }
  }
}