问题:为什么我必须在Kotlin中输入类型而不是在Java中?
我有一个java方法:
processAction(Observable<Action> actions)
Run Code Online (Sandbox Code Playgroud)
我在测试(Java)中调用它:
when(myMock.processAction(any(Observable.class))).thenAnswer(...)
Run Code Online (Sandbox Code Playgroud)
我把它叫做测试(Kotlin):
when(myMock.processAction(any(Observable::class.java) as Observable<Action>).thenAnswer(...)
Run Code Online (Sandbox Code Playgroud)
在Java中,表达式具有以下类型:
Observable.class - > Class<Observable>any(Observable.class) - > Observable同样在Kotlin:
Observable::class.java - > Class<Observable<*>>any(Observable::class.java) - > Observable<*>在Java中,Observable是一种原始类型; 您应该期望您的编译器/ IDE在隐式转换为时突出显示警告Observable<Action>.为了与pre-generics世界向后兼容,这无法编译.
Kotlin试图更聪明地处理泛型,以及向后兼容性的东西不适用.所以它迫使你在这里明确你的意图.
在切线上,如果你在Kotlin中使用Mockito,我强烈推荐使用Mockito-Kotlin绑定,因为它们使得这一点大大减少(any()在这种情况下就是这样).
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |