[解決済み] NULL引数のメソッドオーバーローディング
質問
パラメータを持つ3つのメソッドを追加しました。
public static void doSomething(Object obj) {
System.out.println("Object called");
}
public static void doSomething(char[] obj) {
System.out.println("Array called");
}
public static void doSomething(Integer obj) {
System.out.println("Integer called");
}
を呼び出しているとき
doSomething(null)
というエラーを投げます。
あいまいなメソッド
. ということで、問題は
Integer
と
char[]
メソッドまたは
Integer
と
Object
メソッドですか?
どのように解決するのですか?
Javaは常に、利用可能なメソッドの中で最も具体的に適用可能なバージョンを使用しようとします( JLS §15.12.2 ).
Object
,
char[]
と
Integer
はすべて
null
を有効な値として使用します。したがって、3つのバージョンすべてが適用可能であり、Javaは最も具体的なものを見つけなければならないでしょう。
このため
Object
のスーパータイプです。
char[]
よりも具体的であり、配列バージョンは
Object
-のバージョンです。ですから、もしこの2つのメソッドだけが存在するのであれば
char[]
のバージョンが選択されます。
の両方が存在する場合
char[]
と
Integer
のバージョンが利用可能であれば
両方
よりも具体的である。
Object
そのため、Javaはどちらを呼び出すか決定できない。この場合、引数を適切な型にキャストすることで、どちらを呼び出したいかを明示的に記述する必要があります。
なお、実際には、このような問題が発生することは、想像以上に少ない。というのも、この問題が発生するのは、明示的に
null
のような特殊でない型の変数(例えば
Object
).
逆に、次のような呼び出しは、完全に曖昧さがなくなります。
char[] x = null;
doSomething(x);
という値を渡していますが
null
Javaは変数の型を考慮するので、どのメソッドを呼び出すべきかを正確に知っています。
関連
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] 変数が「未定義」または「NULL」であるかどうかを判断するにはどうすればよいですか?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] instanceofを呼び出す前にnullチェックは必要ですか?
-
[解決済み] Pythonでnullオブジェクトを参照する
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java エラー報告 スレッド "main" での例外 java.util.NoSuchElementException
-
アクセス制限について アプリケーションの種類がAPIでない(必要なライブラリの制限)。
-
SpringBootApplication を型解決できない。
-
Methodのinvokeメソッド実装のJavaリフレクション
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
xxx:jarのアーティファクトディスクリプタの読み込みに失敗した問題は解決しました。
-
linux run jarfile Invalid or corrupt jarfile error.
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
HttpClientがGZIP形式でない場合の対処法
-
起動時にEclipseエラーが発生しました。起動中に内部エラーが発生しました。java.lang.NullPoin: "Javaツーリングの初期化 "中に内部エラーが発生しました。