我正在一個分頁系統對我的Java項目,我想使它通用對我的各種JPA模型。泛型類和方法
的問題(據我所知)是,如果我使用泛型,我會以某種方式轉換返回的最終值進行這項工作。我怎樣才能避免這種情況?
這裏是我到目前爲止的代碼(絕對不是一般的!):
public interface Paginator {
public void setLimit(Integer limit);
public Page page(Integer page);
}
public class PicturesPaginator implements Paginator {
private Integer limit = 10;
private JPAQuery query;
private Long quantity;
public PicturesPaginator(String query, Object... params) {
this.query = Picture.find(query, params);
this.quantity = Picture.count(query, params);
}
@Override
public void setLimit(Integer limit) {
this.limit = limit;
}
@Override
public PicturesPage page(Integer page) {
if (page == null)
page = 1;
List<Picture> pictures = query.fetch(page, limit);
return new PicturesPage(pictures, quantity, page, limit);
}
}
public abstract class Page {
protected List<Picture> pictures;
protected Long quantity;
protected Integer page;
protected Integer limit;
public List<Picture> list() {
return pictures;
}
public Long count() {
return quantity;
}
public boolean hasNext() {
return (page * limit > quantity);
}
public boolean hasPrevious() {
return (page != 1);
}
public boolean hasOtherPages() {
return (hasNext() || hasPrevious());
}
public Integer nextPageNumber() {
if (!hasNext())
return null;
return (page + 1);
}
public Integer previousPageNumber() {
if (!hasPrevious())
return null;
return (page - 1);
}
public Integer currentPageNumber() {
return page;
}
}
public class PicturesPage extends Page {
public PicturesPage(List<Picture> pictures, Long quantity, Integer page, Integer limit) {
this.pictures = pictures;
this.quantity = quantity;
this.page = page;
this.limit = limit;
}
}
我想擺脫那些PicturesPaginator
和PicturesPage
並使它通用的,但是從抽象類頁的list()
方法將返回一個通用列表(List<T>
或List<GenericModel>
,因爲我在這裏使用Play)。 我期望的是這個list()
方法返回正確的列表,也就是List<Picture>
在我的情況。這可能嗎 ?
注:我現在有一個模塊分頁中播放!框架,我的問題主要是爲了解更多關於Java太:)
非常感謝您的幫助,我真的很感激!
謝謝你的幫助。我不明白你從Picture類中看到了什麼:我只使用來自JPA(find&count)的項目。但最後,我升級我的代碼,以允許泛型類使用T擴展GenericModel,我有一個問題:'類 typeToken = ...'拋出此錯誤:'不能將java.lang.Class轉換爲java.lang.reflect .ParameterizedType'。我究竟做錯了什麼? –
Re:圖片類,我是指類的方法找到並計算哪個Play!爲您提供。 Re:ClassCastException - 我假設你沒有像上面描述的那樣創建PicturesPaginator,並且擴展了泛型基類的子類,提供了一個參數化類型(「類PicturesPaginator擴展GenericPaginator
你假設正確! :)我試圖將所有內容都移動到一個Class中,將PicturesPaginator的內容移動到Page中。我最終決定將工作直接添加到我的模型中,並使用這些參數調用Page:JPAQuery(find()的結果),Long(count()的結果)。它並不整齊,但至少可以工作。謝謝你的幫助 :) –