Я добавляю Generics в мой класс разбиения на страницы в Java.У меня возникают проблемы с исправлением кода, чтобы избежать этих предупреждений о «непроверенном приведении» для метода public ArrayList<T> getNextPage()
Предупреждение.* найдено: java.util.ArrayList
Вкл .:
return (ArrayList<T>) getPaginatedContracts(startRow, pageSize);
Предупреждение: java: непроверенное приведение
обязательно: java.util.ArrayList
найдено: java.util.ArrayList
Вкл .:
return (ArrayList<T>) getPaginatedJobs(startRow, pageSize);
В данный момент T
может быть либо Contract
, либоa Job
.
Есть ли другой способ вернуть ArrayList<T>
, который правильно использует Generics без каких-либо предупреждений?
Или, поскольку мой конструктор принимает Class<T>
и выполняет какую-то проверку типа: Например,
if (clazz.isAssignableFrom(Contract.class)) {...}
Допустимо ли мне использовать @SuppressWarnings("unchecked")
на getNextPage()
?
public class PaginationWrapper<T> {
private Class<T> clazz;
private int currentPage;
private int pageSize;
public PaginationWrapper(Class<T> clazz) {
this.clazz = clazz;
this.currentPage = -1;
this.pageSize = 100;
}
private static ArrayList<Contract> getPaginatedContracts(int startRow, int pageSize) {
ArrayList<Contract> list = new ArrayList<>(pageSize);
// Get info from database
return list;
}
private static ArrayList<Job> getPaginatedJobs(int startRow, int pageSize) {
ArrayList<Job> list = new ArrayList<>(pageSize);
// Get info from database
return list;
}
public ArrayList<T> getNextPage() {
currentPage++;
int startRow = currentPage * pageSize;
if (clazz.isAssignableFrom(Contract.class)) {
// Warning: java: unchecked cast
// required: java.util.ArrayList<T>
// found: java.util.ArrayList<Contract>
return (ArrayList<T>) getPaginatedContracts(startRow, pageSize);
} else if (clazz.isAssignableFrom(Job.class)) {
// Warning: java: unchecked cast
// required: java.util.ArrayList<T>
// found: java.util.ArrayList<Job>
return (ArrayList<T>) getPaginatedJobs(startRow, pageSize);
}
return null;
}
static class Contract {
}
static class Job {
}
public static void main(String[] args) {
PaginationWrapper<Contract> contractWrapper = new PaginationWrapper<>(Contract.class);
ArrayList<Contract> paginatedList = contractWrapper.getNextPage();
}
}