Я работаю над системой нумерации страниц для своего проекта 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()
из абстрактного класса Page возвращает возвращаемый универсальный список (List<T>
или List<GenericModel>
, поскольку я использую Play здесь).То, что я ожидал бы, это list()
метод, чтобы вернуть правильный список, иначе List<Picture>
в моем случае.Возможно ли это?
Примечание: у меня теперь есть модуль для разбивки на страницы в Play!Framework, мой вопрос в основном для того, чтобы понять больше о java:)
Большое спасибо за вашу помощь, я очень ценю!