ジェネリック メソッドの明示的な型引数に問題があります。私はこれを行うことができることを知っています:
Foo.<Bar>function();
があると仮定して
void <T> function() {...}
Foo クラスの関数。正確な問題は次のとおりです。
コンテンツをダウンロードしたい (Android with Ion )
これらのコンテンツは類似しており (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 にマッピングするために明示的なクラスを使用しないことです。
一般的な解決策を教えてもらえますか?