java重载方法

标签 java

我有一个抽象模板方法:

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/

相关文章:

java - Drools 规则实现具有多个事实

java - 将具有本地依赖的 Maven 项目部署到 WildFly

java - ASM 字节码操作 - istore 和 istore_<n>

java - 在 Java 类文件中使用数据源

java - 使用 weka jar 在 java 代码中加载朴素贝叶斯模型

java - 如何自动配置 Eclipse?

java - Unknown entity class 错误消息,即使该实体标有@Entity 注解

java - 在外部提供一个 for 循环的变量。这怎么可能?

java - 如何在子查询(hql)中选择多列

java - Spring 数据 jpa,jparepository 返回字符串列表代替 DTO 对象