我需要确保我的应用程序与向我的应用程序扩展的超类引入新钩子方法的依赖项的前向兼容性。当我开始定义作为声明的子类型的返回类型时,引入新添加的方法(被我构建的旧版本忽略并被新版本使用)的直接方法停止工作。
当我直接调用我的重写方法作为foo.bar("")
超类方法被调用时。但是,当我通过 debugger 的反射调用它时foo.getClass().getMethod("bar", String.class).invoke(foo, "")
,它会按预期调用被覆盖的方法。当该方法的返回类型缩小到与被覆盖方法返回的相同类型时,该方法被正确调用,它之前是一个子类型。