JdbcOperationsExtensions.kt
добавляет некоторые функции расширения к интерфейсу org.springframework.jdbc.core.JdbcOperations
(написано на Java). Если вы посмотрите на JavaDocs для queryForObject
, то там будет написано:
@return the single mapped object (may be {@code null} if the given
{@link RowMapper} returned {@code} null)
См. здесь для полного исходного кода JdbcOperations
Java-класса.
Таким образом, написанные на Kotlin функции расширения должны придерживаться этого и позволять возвращать нулевые значения, следовательно, обнуляемый тип.
За исключением ... как указано @AlexeyRomanov, эта конкретная перегрузка queryForObject
принимает лямбду, которая возвращает T
, поэтому никогда не может возвратить ноль, поэтому, возможно, эта перегрузка может вернуть T
, а не T?
. Может быть, это немного противоречиво, что эта лямбда в Kotlin не может возвратить нуль, но JavaDocs на очень похожей перегрузке в классе Java явно заявляет, что ему (RowMapper
) должно быть разрешено возвращать нуль.
Независимо от этого, некоторые другие перегрузки queryForObject
просто призывают к перегрузке, написанной на Java, и, поскольку она написана на Java, вполне возможно, что она может вернуть ноль. Таким образом, для них, кажется, имеет смысл возвращать значение, допускающее значение NULL. В этом случае, возможно, это хорошая последовательность, что все перегрузки на самом деле возвращают обнуляемый T
.