コード:
public class Foo {
static void test(String s){
System.out.println("String called");
}
static void test(int s){
System.out.println("int called");
}
public static void main(String[] args) throws Exception {
test(5>8? 5:8); // Line 1
test(5>8? "he":"ha"); // Line 2
test(5>8? 5:"ha"); // Line 3
System.out.println(5<8? 5:"ha"); //Line 4
}
}
このコードを実行すると、次のエラーが発生しますLine 3
Foo.java:24: error: no suitable method found for test(INT#1)
test(5>8? 5:"ha"); // Line 3
^
三項演算子で同様の型を使用しても、エラーは発生しません。ただし、異なるタイプを使用すると、メソッド呼び出しでのみエラーが発生しますtest(5>8? 5:"ha");
が、呼び出しでは機能しますSystem.out.println(5<8? 5:"ha");
別のオーバーロードされたメソッドを追加するとstatic void test(Object s){}
、//Line 3
コンパイルされます。
誰かこのシナリオを説明してくれませんか?