なぜJavaメソッドのオーバーロードで考慮型を返すされていませんか?
-
21-09-2019 - |
質問
なぜメソッドの戻り値の型はメソッドのオーバーロードでは考慮されていませんか? 誰かがオーバーロードされたメソッドのために、どのようにコンパイラのチェックを説明することはできますか?
解決
メソッドの戻り値の型は、メソッドのオーバーロードでは考慮されていないのはなぜ?
主な理由は、あなたがはこのことを考慮しなかった場合、戻り値が何かに割り当てられていない場合は、関数呼び出しの多くは曖昧になるということです。例えば、その関数呼び出しは、ここで呼び出されていますか?
public String x() { ... }
public int x() { ... }
// ...
x(); // <-- Which one did you mean? It's impossible to tell if you
// allow return types to be part of method overloads.
あまりにも、これを行うにはしたくないために、他の理由があります。それは多くの言語は、のは彼らの署名が唯一の戻り値の型が異なることを可能ん、と述べました。ハスケルとPerlは2つの例です。単に一つの方法または別のものを選択するようにコンパイラのための明確な方法があります:あなたの言語がこれを許可しない場合、それはあなたがこれをサポートする必要があるだろうすべてはあなたのメソッド解像処理における一歩であることを確認するために難しいことではありません。上記の例では、おそらく我々は、優先順位(多分定義された最初の方法は、WINSは、例えば、私達のx()
コールがString x()
を呼び出すであろうように、1つである)を定義します。
ノートへのもう一つは、JVMは、のないのシグネチャが異なっのみ戻り値の型で存在する2つのメソッドを許可することです。 (それのスカラ座とこれをサポートする他のJVM言語がそれを行う方法。
他のヒント
缶誰かがオーバーロードされたメソッドのために、どのようにコンパイラのチェックを説明する?
Java言語仕様、セクション8.4.9は、決定的な(しかし非常に技術的な)答えが含まれます。 http://java.sun.com/ドキュメント/書籍/ JLS / third_edition / HTML / classes.html#8.4.9 の