Single.error
не возвращает Single<Exception>
, возвращает Single<T>
в соответствии со своей подписью:
public static <T> Single<T> error(final Throwable exception)
Поскольку параметр типа T
не используется нигде в подписикроме возвращаемого типа (то есть, например, он не принимает T
в качестве параметра), он может быть выведен на любой тип, который вам нужен, возвращаемый из этой функции, заключенный в Single
.
Еще несколько примеров:
val stringError: Single<String> = Single.error(Exception()) // T inferred to be String
val intError: Single<Int> = Single.error(Exception()) // T inferred to be Int
Или, если вы хотите указать параметр при непосредственном вызове функции (в этом случае вы можете опустить типы для переменных вс левой стороны):
val stringError: Single<String> = Single.error<String>(Exception()) // T specified as String
val intError: Single<Int> = Single.error<Int>(Exception()) // T specified as Int
Все это имеет смысл, поскольку Single
любого типа может ошибаться точно так же, независимо от того, какой тип будет иметь значение без ошибок.