2009年09月23日

メソッドのオーバーロードの解決

   このエントリーをはてなブックマークに追加 Clip to Evernote
このようなクラスがあったとします。


このとき、以下のような呼び出しを行うと、どのメソッドが呼ばれるのかを調べてみました。


実行した結果は、


となりました。
このことから、暗黙の型変換よりも、ジェネリックメソッドの パラメータ型のほうが優先順位が高いということが推察できます。
ただ、1番目の呼び出しのように引数の型が異なる場合は、コンパイラは、型変換を行い、どれかのメソッドと一致させようとするので、ジェネリックメソッドではない通常のメソッドが選択されることになるようです。
どのメソッドが呼ばれるのかは、なんとなく感覚的には分かるのですが、これを言葉であらわそうとすると、うまく表現できません。


この記事へのコメント
>暗黙の型変換よりも、ジェネリックメソッドのパラメータ型のほうが優先順位が高い
ジェネリック型は、結局、特定の型に決定するから
特定の型があるメソッドと暗黙の型変換が必要なメソッドとでは、
特定の型が優先されるから、ジェネリック型が優先される。
ということだと思います。

>1番目の呼び出し
ジェネリック型でマッチしようとした場合、
型を下げるワケに行かないので、aとbの型からlong でマッチすることになるが、long,long は、既にあるので、それが使われる。
んじゃないかと思います。
Posted by BLUEPIXY at 2009年09月25日 03:59
なるほど、分かりやすいです。
どうもありがとうございます。
Posted by Gushwell at 2009年09月26日 22:36
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/51897713