我有一个抽象模板方法:
class abstract MyTemplate
{
public void something(Object obj)
{
doSomething(obj)
}
protected void doSomething(Object obj);
}
class MyImpl extends MyTemplate
{
protected void doSomething(Object obj)
{
System.out.println("i am dealing with generic object");
}
protected void doSomething(String str)
{
System.out.println("I am dealing with string");
}
}
public static void main(String[] args)
{
MyImpl impl = new MyImpl();
impl.something("abc"); // --> this return "i am dealing with generic object"
}
如何在 doSomething(Object obj) 中不使用 instanceof 打印“我正在处理字符串”?
谢谢,
最佳答案
你真的做不到。 Java 不能开箱即用地进行双重分派(dispatch)。问题是方法调用的绑定(bind)通常主要在编译时完成。
在这里http://en.wikipedia.org/wiki/Double_dispatch
在这里
http://www.javaperformancetuning.com/articles/ddispatch2.shtml
关于java重载方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4640787/