我有接口A
,并从其扩展了类AB
,AC
和AD
。我调用一个给我A
的方法(实际上是AB
,AC
或AD
的实例)。我创建了以下代码:
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)
结尾。为什么?有办法解决吗?我不想做很多ifs
和instanceofs
...