建议使用switch或if-else语句来回答所有其他此类问题,我想完全避免。 因此,我有一个带有两个重载方法的客户端类,该方法使用某些接口实现的两个不同实例。为简单起见:
public interface MyInterface<R extends Register> {
Object myServiceMethod(R register);
然后有一个具有两种方法的客户端
public Double methodName(Class1 name1)
public Double methodName(Class2 name2)
Class1和Class2都实现Register的地方。在MyService实现中,我需要做的是调用正确的方法,而无需先验地知道它将获得哪个类
public class MyServiceImplementation implements MyInterface<Register>{
@Override
public Object myServiceMethod(Register myRegister){
return myClient.methodName(*and here is a place for magic)
}
我需要做类似的事情:
return myClient.methodName((myRegister.getClass()) myRegister);
但是,由于这是非法的-我的问题在这里。
答案 0 :(得分:0)
这闻起来糟糕的面向对象设计,但是这里是您要做什么的方法。基本上,您似乎正在尝试在编译时执行运行时多态,而这在Java中不起作用。 (某些动态语言,例如Groovy可以做到。)因此,您需要明确地进行区分:
if (myRegister instanceOf Class1)
myClient.methodName((Class1) myRegister); // Selects this overload at compile time
else if (myRegister instanceOf Class2)
myClient.methodName((Class2) myRegister);
else
throw new RuntimeException("Unrecognized type: " + myRegister.getClass());
答案 1 :(得分:0)
更改您的客户代码。
更改:
public Double methodName(Class1 name1)
public Double methodName(Class2 name2)
收件人:
public Double methodName(Register register)