Код:Передача аргумента метода через тройной оператор в Java
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
компилирует.
Может ли кто-нибудь объяснить мне этот сценарий?
niceely Answered! –
Теперь я понимаю, как определить возвращаемый тип тернарного оператора. Основываясь на вашем объяснении, я задавался вопросом, имеет ли метод 'System.out.println()' перегруженный метод, который принимает параметр Object как параметр и обнаружил, что в PrintStream существует метод public void println (Object x) '. Если бы вы могли добавить этот момент в свой ответ, это будет полезно для других. –
Я чувствую, что это совсем другая проблема. Кроме того, большинство программистов Java знают, что они могут передать любой объект, который им нравится, в 'System.out.println'. –