Tôi gặp vấn đề với các đối số kiểu rõ ràng của phương thức chung. Tôi biết tôi có thể làm điều này:Đối số loại phương thức chung Java
Foo.<Bar>function();
giả sử có một chức năng
void <T> function() {...}
trong lớp Foo. Vấn đề chính xác là:
Tôi muốn tải về một số nội dung (Android với Ion)
Những nội dung tương đồng (Điều, BlogArticle, ...), tất cả thực hiện một giao diện ContentItem
Tại thời điểm này tải trông như thế này:
tin tức ví dụ
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
}
});
}
Nếu tôi muốn tải xuống các bài viết trên blog, tôi phải thay đổi url và Chỉ lớp bài viết (cho BlogArticle).
tôi đã cố gắng để thực hiện một chức năng chung chung như thế này:
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
}
});
}
và gọi đó là chức năng
this.<Article>download(url);
Đó là ok, biên dịch tốt. Sau khi chạy tôi nhận được
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap không thể được đúc để com.my.packagename.model.ContentItem
Vấn đề là nó doesn không sử dụng lớp rõ ràng để ánh xạ Json vào thư mục.
Bạn có thể đề xuất cho tôi giải pháp chung không?
Những dòng để bạn có được những lỗi trên? – shmosel
Xem http://stackoverflow.com/questions/24505314/parsing-json-to-list-of-items-with-generic-field-with-gson – axtavt
Nó trỏ đến dòng đầu tiên của lớp, vì vậy không có gì thú vị –