Pense em um Service que agora lida com Informe de Rendimentos. E modificamos nosso Funcionario pra que ele tenha uma coleção de reajustes que recebeu.
public class Funcionario {
private List<Reajuste> reajustes;
}
public class InformeRendimentosService {
public BigDecimal extrato(Funcionario funcionario) {
BigDecimal impostoPago = BigDecimal.ZERO;
for(Reajuste reajuste : funcionario.getReajustes()) {
impostoPago = impostoPago.add(reajuste.valorImpostoDeRenda());
}
return impostoPago;
}
}
Bom, o código acima não funciona bem, sequer compila, pois o método 'valorImpostoDeRenda()' não existe em Reajuste, existe apenas em ReajusteTributavel. Porém a lista de reajustes do funcionário pode conter tanto Anuenios quanto Promoções. Qual a melhor saída pra esse caso?