Strings をコレクションとして扱うクラスがあります。これらは、クラスの 2 つのメソッドです。
@Override
public <B> IndexedSeq<B> map(final Function1<? super Character, B> function) {...}
public RichString map(final Function1<? super Character, Character> function) {...}
メソッドからの署名だけが私の質問に関連しています。現在、Eclipse は、2 つのメソッドの消去が同じであるという警告を発行します。しかし、それでもそれらを作成することはでき、期待どおりに機能します。Character を Character に変換する関数を指定すると、必要に応じて RichString が返されます。
私の質問は、実行時にジェネリック型に関する情報がなく、メソッドの戻り値がメソッド シグネチャの一部ではないため、なぜ機能するのかということです。2 つのメソッドを呼び出したときに、JVM はどのメソッドを呼び出すべきかをどのように知ることができますか?
編集:
消去後、2 つのメソッドには次の署名があると思います。
@Override
public IndexedSeq map(final Function1<Object, Object> function) {...}
public RichString map(final Function1<Object, Object> function) {...}
これにより、戻り値の型だけが異なります。