Java выбирает наиболее конкретно применимый метод. Поскольку <T>
определяется на месте вызова, может быть выбран любой из PrintStream.println
методов, которые принимают параметр ссылочного типа.
Из JLS 15.12.2.5 :
Неформальная интуиция заключается в том, что один метод более специфичен, чем другой, если любой вызов, обработанный первым методом, может быть передан другому без ошибки времени компиляции.
Все, что вы можете передать println(char[])
или println(String)
, также можно передать println(Object)
, поэтому первые методы более специфичны, чем последние. Таким образом, они будут выбраны в предпочтении println(Object)
.
Однако некоторые вещи, которые могут быть переданы в println(char[])
, не могут быть переданы в println(String)
, поэтому ни один из них не является более конкретным, чем другойотсюда и неоднозначный вызов метода.