Java通用方法类型参数

塔马斯·切(TamásCseh)

我对泛型方法的显式类型参数有疑问。我知道我可以这样做:

Foo.<Bar>function();

假设有一个

void <T> function() {...}

在Foo类中起作用。确切的问题是:

  • 我想下载一些内容(带有Ion的Android

  • 这些内容相似(Article,BlogArticle等),都实现了ContentItem接口

  • 目前,下载内容如下所示:

例如新闻

private void downloadNews() {
    Ion.with(this)
    .load(URL_NEWS)
    .as(new TypeToken<List<Article>>(){})
    .setCallback(new FutureCallback<List<Article>>() {
        @Override
        public void onCompleted(Exception e, List<Article> result) {
            // do something with result
        }
    });
}

如果要下载博客文章,则仅需更改url和Article类(对于BlogArticle)。

我试图做一个通用的函数是这样的:

private <T extends ContentItem> void download(String url) {
    Ion.with(this)
    .load(url)
    .as(new TypeToken<List<T>>(){})
    .setCallback(new FutureCallback<List<T>>() {
        @Override
        public void onCompleted(Exception e, List<T> result) {
            // do something with result
        }
    });
}

并调用该函数

this.<Article>download(url);

没关系,编译正常。跑步后我得到

java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap无法转换为com.my.packagename.model.ContentItem

问题在于它没有使用显式类将Json映射到pojo。

您能建议我一个通用的解决方案吗?

塔马斯·切(TamásCseh)

几年后,但我认为这对某人可能有用。我最终得到了一个更简单的解决方案。它只是一个简单的,被截断的版本,但是您可以了解一下:

public static <T> void asList(Context context, String url, Class<T[]> clazz, final FutureCallback<List<T>> callback) {
    Ion.with(context)
        .load(url)
        .as(clazz)
        .setCallback(new FutureCallback<T[]>() {
            @Override
                public void onCompleted(Exception e, T[] result) {
                    callback.onCompleted(e, Arrays.asList(result));
                }
        });
}

并使用像:

asList(context, url, YourObject[].class, new FutureCallback<List<YourObject>>() {...});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java通用方法类型参数

来自分类Dev

通用方法参数的类型

来自分类Dev

方法参数的通用类型

来自分类Dev

在Java中将通用类型作为通用方法参数传递

来自分类Dev

通用方法类型参数声明

来自分类Dev

通用方法类型参数确定

来自分类Dev

检查方法参数的通用类型

来自分类Dev

通用类型作为方法参数

来自分类Dev

通用方法类型参数声明

来自分类Dev

Java扩展通用类型参数

来自分类Dev

Java通用获取类型参数

来自分类Dev

Java通用获取类型参数

来自分类Dev

通用方法参数-Java

来自分类Dev

Java:使用lambda参数获取通用方法的实际类型

来自分类Dev

从参数动态推断通用方法的类型参数

来自分类Dev

通用方法返回类型作为类型参数

来自分类Dev

java通用方法返回类型

来自分类Dev

方法参数:接口VS通用类型

来自分类Dev

带有通用类型参数的导入方法

来自分类Dev

提供通用方法参数的具体类型值

来自分类Dev

无法识别通用方法参数类型?

来自分类Dev

具有newInstance的Java通用类型参数

来自分类Dev

Java中的通用参数类型匹配

来自分类Dev

Java通用类扩展了参数化类型

来自分类Dev

具有newInstance的Java通用类型参数

来自分类Dev

Java通用类型参数未通过验证

来自分类Dev

Java中的通用参数类型匹配

来自分类Dev

Java如何使用可变参数方法和通用返回类型实现接口

来自分类Dev

隐藏在Java通用接口中其他方法上的集合类型参数