Я думаю, есть много способов решить эту проблему, но вот мой путь.Из вашего кода я делаю вывод, что у клиента есть не более одной страховки, поэтому я бы использовал перечисление и карту вместо
enum InsuranceType {
CAR,
BOAT,
HOME
// and so on...
}
И тогда я бы сохранял объект страховки с перечислением всопоставление в классе Customer или аналогичном, так как оно для каждого клиента
Map<InsuranceType, AbstractInsurance> insurances = new HashMap<>();
и метод доступа к ним
public AbstractInsurance getInsurance(InsuranceType type) {
return insurances.get(type);
}
Этот метод, конечно, может возвращать ноль, но вы должны его обработать, когдавызывая его, потому что его нельзя избежать.
Если вы хотите, вы также можете добавить удобные методы для получения определенной страховки, например
public CarInsurance getCarInsurance() {
return (CarInsurance) insurances.get(InsuranceType.CAR);
}
Для Java 8 и более поздних версий, вы можете позволить методам возвращатьсяНеобязательный, чтобы избежать проблем исключений нулевого указателя
public Optional<AbstractInsurance> getInsurance(InsuranceType type) {
return Optional.of(insurances.get(type));
}
public Optional<CarInsurance> getCarInsurance() {
return Optional.of((CarInsurance) insurances.get(InsuranceType.CAR));
}