Mam taki kawalke kodu:
List<?> getFilteredTransactions(List<Transaction> transactions, Class transactionClass){
transactions.stream()
.filter(t -> transactionClass.isInstance(t))
.map(t -> (transactionClass.cast(t)))
.collect(Collectors.toList());
//return transaction po pewnych dodatkowych modyfikacjach
}
W jaki sposob moge zrocic liste konkretnie typu transactionClass? (Chodzi mi o List<?> gdzie ? chce zamienic na przekazana w parametrze klase transactionClass)
Do pelnego obrazu dodam, ze uklad klas wyglada mnie wiecej tak:
class Transaction {}
class SecurityTransaction extends Transaction{}
class CashTransaction extends Transaction {}
//...
Chcialabym miec jedna generyczna metode, zamiast np. getFilteredCashTransactions, getFilteredSecurityTransactions
EDIT:
Zmodyfikowalam troche kod, ale nie wiem czy to najlepsze rozwiazanie?
private <T> List<T> getFilteredTransactions(int numberOfMonths, List<Transaction> transactions, Class<T> transactionClass) {
List<Transaction> filtered = transactions.stream()
.filter(t -> transactionClass.isInstance(t))
.collect(Collectors.toList());
return Collections.unmodifiableList(transform(filtered)
.stream()
.map(t -> transactionClass.cast(t))
.collect(Collectors.toList()));
}