gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:43:32 26 4
gpt4 key购买 nike

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

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) {}
}

讨论 here ,java会在编译时根据类型信息选择最好的方法。 (即,它将始终选择 executeAction(PersonVO person) )。

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

The internet告诉我使用 instanceof 会让我挨打。但是,如果不将 abstractPerson 显式转换为其他具体类型之一,我看不到选择方法的适当方式。

编辑:澄清一下 - 传入的 VO 是一个简单的 ValueObject,供 Web 客户端实例化和传入。按照惯例,它上面没有方法,它只是一个数据结构领域。

因此,调用 personVO.executeAction() 不是一种选择。

谢谢

马蒂

最佳答案

如果 executeActionPersonVOEmployeeVOManagerVO 通用的基类或接口(interface)中的方法> 和 UnicornWranglerVO,您可以只调用 abstractPerson.executeAction() 而不是使用多个重写方法。

关于Java 多态性——根据子类型选择正确的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2876507/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com