私のアプリケーションが拡張されるスーパークラスに新しいフックメソッドを導入した依存関係と、アプリケーションの互換性を確保する必要があります。新しく追加されたメソッドを導入する簡単なアプローチ(宣言されたメソッドのサブタイプである戻り値タイプを定義し始めた直後に、私がビルドして使用する古いバージョンでは無視される)は機能しなくなりました。オーバーライドされたJavaメソッドが存在するにもかかわらず呼び出されない
オーバーライドされたメソッドを直接foo.bar("")
と呼び出すと、スーパークラスメソッドが呼び出されます。ただし、デバッガーfoo.getClass().getMethod("bar", String.class).invoke(foo, "")
からのリフレクションを通じて呼び出すと、オーバーライドされたメソッドが期待通りに呼び出されます。戻り値の型がオーバーライドされた同じ型に絞り込まれると、このメソッドは正しく呼び出されます。戻り値は以前はサブタイプでした。