Почему я должен играть в Kotlin, а не на Java? - PullRequest
0 голосов
/ 11 декабря 2018

Вопрос : Почему я должен приводить тип в Kotlin, а не в Java?

У меня есть метод Java:

processAction(Observable<Action> actions)

Я вызываю его в тесте(Java):

when(myMock.processAction(any(Observable.class))).thenAnswer(...)

Я называю это в тесте (Kotlin):

when(myMock.processAction(any(Observable::class.java) as Observable<Action>).thenAnswer(...)

Репо здесь

1 Ответ

0 голосов
/ 11 декабря 2018

В Java ваши выражения имеют следующие типы:

  • Observable.class -> Class<Observable>
  • any(Observable.class) -> Observable

Аналогично в Котлине:

  • Observable::class.java -> Class<Observable<*>>
  • any(Observable::class.java) -> Observable<*>

В Java,Observable является необработанным типом;вы должны ожидать, что ваш компилятор / IDE выделит предупреждение, когда вы неявно преобразуете в Observable<Action>.Для обратной совместимости с миром, предшествующим дженерикам, это не может не компилироваться.

Kotlin старается быть умнее в том, как он обрабатывает дженерики, плюс вещь обратной совместимости не применяется.Таким образом, это заставляет вас четко указывать свои намерения здесь.


На касательной, если вы используете Mockito в Kotlin, я настоятельно рекомендую привязки Mockito-Kotlin , поскольку они делают это существенно менее многословным (в данном случае это будет any()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...