Java 多态性 - 根据子类型选择正确的方法

Mar*_*itt 3 java polymorphism design-patterns

给定以下类和服务层签名:

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) {}
}
Run Code Online (Sandbox Code Playgroud)

正如这里所讨论的,java 将在编译时根据类型信息选择最佳方法。(即,它将始终选择executeAction(PersonVO person))。

选择正确方法的最合适方法是什么?

互联网告诉我,使用instanceof会让我打耳光。但是,我没有看到在不显式转换abstractPerson为其他具体类型之一的情况下选择方法的适当方法。

编辑: 澄清 - 传入的 VO 是一个简单的 ValueObject,为 Web 客户端公开以实例化和传入。按照惯例,它上面没有方法,它只是一个带有字段的数据结构。

因此,呼叫personVO.executeAction()不是一种选择。

谢谢

马蒂

Rob*_*ser 5

如果executeAction是在一个基类或接口的方法,这是常见的PersonVOEmployeeVOManagerVOUnicornWranglerVO,你可以只调用abstractPerson.executeAction(),而不必多次覆盖的方法。