gpt4 book ai didi

使用 Mockito 验证时来自 Kotlin 的 Java 泛型?

转载 作者:行者123 更新时间:2023-12-05 04:36:19 24 4
gpt4 key购买 nike

我使用的是 Kotlin 1.6.10、Mockito 4.0.0 和 Java 8,我有一个定义如下的 Java 接口(interface):

public interface MyInterface {
<D, T extends MyObject<T, D>> T doThings(T myObject);
}

此接口(interface)的实现在 Kotlin 应用程序中使用,我们有一个单元测试,我们希望在其中确保永远不会使用 Mockito 调用 doThings 方法。在 Java 中我会这样做:

verify(myInterfaceInstance, never()).doThings(any());

但是如果我在 Kotlin 中这样做,我会得到一个编译时错误:

verify(myInterfaceInstance, never()).doThings(any())

Not enough information to infer type variable D

我明白为什么会这样,但我无法让它工作。在这种特殊情况下,我真的不关心泛型类型,我只想确保永远不会调用 doThings。我尝试了很多不同的东西,例如:

verify(myInterfaceInstance, never()).doThings<Any, MyObject<*, Any>>(any())

失败:

Type argument is not within its bounds.
Expected:
MyObject<MyObject<*, Any>!, TypeVariable(D)!>!
Found:
MyObject<*, Any!>!

我也试过:

verify(myInterfaceInstance, never()).doThings<Any, MyObject<*, *>>(any())

和其他几个排列似乎都失败了,错误消息大致相同。

所以我的问题是,如何在 Kotlin 中执行与 Java 的 verify(myInterfaceInstance, never()).doThings(any()); 等效的操作?

最佳答案

这编译得很好,但是发出了一些警告,你可以通过尊重的注释来抑制它们:

@Suppress("TYPE_MISMATCH_WARNING", "UPPER_BOUND_VIOLATED_WARNING")
verify(myInterfaceInstance, never()).doThings<Any, MyObject<*, *>?>(any<MyObject<*, *>>())

关于使用 Mockito 验证时来自 Kotlin 的 Java 泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70859945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com