Jos*_*ess 5 java overloading interface
我确信这是基本的,但我很难过.这个例子非常过于简化,但归结为以下几点.我在类中有一些重载方法,如下所示:
public void build(MyImplOneOfAnInterface item);
public void build(MyImplTwoOfAnInterface item);
Run Code Online (Sandbox Code Playgroud)
然后,我有另一种方法,执行以下操作:
public void buildIt(MyInterface item) {
build(item);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译时,我收到以下错误:
找不到标志
这是因为JVM无法在编译时确定接口的实现,因此它知道要调用哪个重载方法.
如何在运行时决定?似乎JVM应该能够解决这个问题.
PS:我不想定义一个以接口作为参数的方法,然后使用instanceof运算符执行一堆if/else语句.
你可以使用双重派遣.有一个MyInterface.build,然后在您的实现类中重载,以调用相关的方法.例如:
interface MyInterface {
void build(Thingy t);
}
class MyImplOneOfAnInterface implements MyInterface {
void build(Thingy t) { t.build(this); }
}
...
void buildIt(MyInterface item) {
item.build(this);
}
Run Code Online (Sandbox Code Playgroud)