为什么我必须使用Kotlin而不是Java?

时间:2018-12-11 19:39:14

标签: java kotlin

问题:为什么我必须在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(...)

Repo Here

1 个答案:

答案 0 :(得分:6)

在Java中,您的表达式具有以下类型:

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

就像科特林一样:

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

在Java中,Observable是原始类型;当您隐式转换为Observable<Action>时,应该期望您的编译器/ IDE突出显示警告。为了与前泛型世界向后兼容,这不会编译。

Kotlin试图更加聪明地处理泛型,而且不向后兼容。因此,这迫使您在此明确自己的意图。


在切线上,如果您在Kotlin中使用Mockito,我强烈建议您使用Mockito-Kotlin bindings,因为这样会使它们的冗长程度大大降低(本例中为any())。