С учетом следующих сигнатур классов и уровней обслуживания:
public class PersonActionRequest {
PersonVO person
// ... other fields
}
public class MyServiceLayerClass {
public void requestAction(PersonActionRequest request)
{
PersonVO abstractPerson = request.getPerson();
// call appropriate executeAction method based on subclass of PersonVO
}
private void executeAction(PersonVO person) {}
private void executeAction(EmployeeVO employee) {}
private void executeAction(ManagerVO manager) {}
private void executeAction(UnicornWranglerVO unicornWrangler) {}
}
Как обсуждено здесь , java выберет лучший метод на основе информации о типе во время компиляции. (То есть, он всегда будет выбирать executeAction(PersonVO person)
).
Какой самый правильный способ выбрать правильный метод?
Интернет говорит мне, что использование instanceof
дает мне пощечину. Однако я не вижу подходящего способа выбора метода без явного приведения abstractPerson
к одному из других конкретных типов.
РЕДАКТИРОВАТЬ: Чтобы уточнить - Переданный VO представляет собой простой ValueObject, предоставляемый для веб-клиентов для создания экземпляров и передачи. По соглашению у него нет методов, это просто структура данных с полями ,
По этой причине звонить по номеру personVO.executeAction()
нельзя.
Спасибо
Marty