编程语言
首页 > 编程语言> > 解决没有Double Dispatch / Visitor模式的Java静态方法分派

解决没有Double Dispatch / Visitor模式的Java静态方法分派

作者:互联网

我正在使用提供以下方法的Foo类:

String overloadedMethod(Object)
String overloadedMethod(Goo)

由于Java静态地基于non-receiver参数进行分派,因此我不能只传递我的值(它是一个Object,但可能具有动态类型Goo)并依靠JVM动态地选择“正确”方法.

这是我当前的(丑陋的)解决方法:

Object value = ...;
Foo foo = new Foo();
if (value instanceof Goo) {
    Goo gooValue = (Goo) value;
    return foo.overloadedMethod(gooValue); // -> overloadedMethod(Goo)
} else {
    return foo.overloadedMethod(value);    // -> overloadedMethod(Object)
}

有没有一种更好的方法,而无需修改Foo(包含重载方法的类)中的代码?

解决方法:

当然,您始终可以使用反射来找到适用的方法的最特定版本,但这可能很快就会使您毛骨悚然.

但是,如果这两个调用导致完全不同的行为,那么Foo要么被设计为用于访客模式(即双重调度),要么被破坏了.

标签:multiple-dispatch,overloading,method-dispatch,dynamic-dispatch,java
来源: https://codeday.me/bug/20191024/1921790.html