围绕Java';没有双重分派/访问者模式的静态方法分派
我使用的类围绕Java';没有双重分派/访问者模式的静态方法分派,java,overloading,multiple-dispatch,method-dispatch,dynamic-dispatch,Java,Overloading,Multiple Dispatch,Method Dispatch,Dynamic Dispatch,我使用的类Foo提供了以下方法: String overloadedMethod(Object) String overloadedMethod(Goo) 由于Java静态地分派非接收方参数,因此我不能只传递我的值(这是一个对象,但可能具有动态类型Goo),并依赖JVM动态地选择“正确”方法 这是我目前(丑陋的)工作重点: Object value = ...; Foo foo = new Foo(); if (value instanceof Goo) { Goo gooValue
Foo
提供了以下方法:
String overloadedMethod(Object)
String overloadedMethod(Goo)
由于Java静态地分派非接收方参数,因此我不能只传递我的值
(这是一个对象
,但可能具有动态类型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要么被设计用于访问者模式(即双重分派),要么就被破坏了。您可以看看。它几乎是围绕着你的提议的一层,但至少它被抽象成一个逻辑模块,这不是你的责任
(据我所知,如果不借助黑客的反射/实例,没有干净的方法可以做到这一点)