强制使用最具体的方法

时间:2018-09-20 15:49:57

标签: java

我有接口A,并从其扩展了类ABACAD。我调用一个给我A的方法(实际上是ABACAD的实例)。我创建了以下代码:

private parse(A arg){
    throw new NotSupportedException("We don't support:" + arg.getClass());
}

private parse(AB arg){
    //do something
}
private parse(AC arg){
    //do something
}

private void doStuff(){
    parse(somethingThatReturnsSomeInstanceOfA());
}

这个想法是,我需要根据实际类型做不同的事情。我无法控制这些接口,因此无法将解析方法移到那里。我想利用Java行为来选择最具体的重载方法。您会注意到,我没有用于AD的方法-我不想为所有扩展接口实现特定的行为,因此该方法接受A抛出异常。

但这不起作用。即使在调用getClass()AB返回parse()时,我总是以parse(A)结尾。为什么?有办法解决吗?我不想做很多ifsinstanceofs ...

0 个答案:

没有答案