java - 如何将 List<Object> 转换为 List<T>?

标签 java android list object generics

这是将 retrofit 响应作为对象获取的代码。下面的方法工作正常,但我需要一个通用函数来执行上述功能,即类名可能会有所不同。 (例如)门票、价格、代币、预约,如下所示:

processGETRequest(AppController.getApiHelper().searchTickets(from, to), new RetrofitListener() {
    @Override
    public void onSuccess(Object object) { }

    @Override
    public void onSuccess(List<Object> object) {

        // Here I'm getting retrofit response as a object //

        if (object != null) {

            // Below method is working fine //

            List<Ticket> ticketList = new ArrayList<>();
            for (Object result : object) {
                String json = new Gson().toJson(result);
                Ticket model = new Gson().fromJson(json, Ticket.class);
                ticketList.add(model);
            }

            // I need an one common function for performing above functionality
            // i.e the Class name may vary.. (e.g) Ticket, Price, Token, Appointment like this.
        }
    }

    @Override
    public void onError(String error) {
        Log.d("error: ", " " + error);
    }
}, false);

RetrofitListener 接口(interface)很简单:

public interface RetrofitListener {
    void onSuccess(Object object);
    void onSuccess(List<Object> object);
    void onError(String error);
}

最佳答案

您可以使用类似于以下的静态函数:

static <T> List<T> toList(List<Object> object, Class<T> desiredClass) {
    List<T> transformedList = new ArrayList<>();
    if (object != null) {
      for (Object result : object) {
          String json = new Gson().toJson(result);
          T model = new Gson().fromJson(json, desiredClass);
          transformedList.add(model);
      }
    }
    return transformedList;
}

基本上,您只需确保提供所需的类型(例如 desiredClass)并在 fromJson 中使用它。

示例用法:

List<Ticket> ticketList = toList(object, Ticket.class);
List<Price> priceList = toList(object, Price.class);

请注意,通过将 object != null 移动到 toList 方法中,您无需关心传递给该方法的内容。作为返回,您至少会得到一个空列表。

关于java - 如何将 List<Object> 转换为 List<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52071416/

相关文章:

具有可变步长的 Python 列表切片?

python 2.7.5+ 打印列表,逗号后没有空格

java - 如何将子菜单添加到 MenuItem

java - 形式错误 : org. springframework.dao.EmptyResultDataAccessException : Incorrect result size: expected 1, 实际 0

javascript - 启用单词建议时,Android 上的 Firefox 不会触发关键事件

android - 如何在android eclipse中链接多个表单?

python循环从列表中找到最大的整数

java - 使用 BorderLayout 绘制到嵌套面板

Java如何计算时差

Android 以编程方式创建 ViewPager