代码之家  ›  专栏  ›  技术社区  ›  brabster

用于补偿基于Java中多态ARG的运行时方法查找不足的模式?

  •  4
  • brabster  · 技术社区  · 14 年前

    看来,Java无法根据一个参数的运行时类型选择最合适的方法实现,如文档化的。 here . 概括示例:

    class Superclass {}
    class Subclass extends Superclass {}
    class Test {
        public void aMethod(Superclass s) {...}
        public void aMethod(Subclass s) {...}
    }
    

    测试类的哪个方法是根据引用的类型而不是实例的类型来确定的。同样,根据链接的示例:

    Test aTest = new Test();
    Superclass aSuper = new Subclass();
    test.aMethod(aSuper);
    

    它是 aMethod(Superclass s) 执行,而不是 aMethod(Subclass s) .

    我试图在侦听器模式上创建一个变体,其中侦听器通过接口“插入”,侦听器具有为接口子类定义的方法。

    作为我意思的一个简单例子,假设我正在构建一个可以插入功能的闹钟。

    我想到的上述实现看起来像一个接口 Event ,具有子类 WakeUpEvent 和接口 EventListener 要求执行 handle(Event evt) .

    我希望创建一个实现无操作的类 句柄(事件evt) 具有特定 handle(WakeUpEvent evt) 如果听者想处理这种类型的事件。

    当然,这种方法不能按原样工作-显而易见的解决方案是运行时 instanceof 检查- YUK。

    有没有什么模式或方法可以用来获得我想要的行为?

    4 回复  |  直到 14 年前
        1
  •  4
  •   duffymo    14 年前

        2
  •  7
  •   khachik    14 年前

        3
  •  0
  •   mikera    14 年前

        4
  •  0
  •   jk3000    14 年前

    Test EventListener handle