gpt4 book ai didi

java - 无法在 Kotlin 中使用 Optional 模拟 `willReturn`

转载 作者:行者123 更新时间:2023-12-04 16:38:37 24 4
gpt4 key购买 nike

我有一个方法

fun getUser(userId: UserId): Optional<User?> = userRepository.findById(userId)

在 Java 中返回一个 Optional。所以我想在我的 Kotlin 单元测试中模拟该方法调用。

这是我的第一个猜测......

given { mockedUserService.getUser(currentUser.userId) }.willReturn(Optional.of(currentUser))

...但是编译器说不

Type mismatch: inferred type is Optional but Optional<User?>! was expected

所以我开始制作 val currentUser: User? 只是为了让编译器满意。

given { currentUser?.userId?.let { mockedUserService.getUser(it) }.willReturn(Optional.of(currentUser))

Type mismatch: inferred type is Optional but Optional<User?>? was expected

Type mismatch: inferred type is User? but TypeVariable(T) was expected

现在我有点迷路了。我怎样才能让编译器满意?

最佳答案

考虑将此作为替代方案。我假设您使用的是 Java 类型 Optional 而不是您自己的实现(做的比我在这里看到的更多)。

Optional 出现在 Java 中是为了避免 NPE 并指示在运行时缺少类型。但在 Kotlin 中,您实际上并不需要 Optional,因为您可以明确地将类型定义为可为空的 T?

因此您可以将其定义为:

fun getUser(userId: UserId): User?

fun getUser(userId: UserId): Optional<User> // not nullable!

关于java - 无法在 Kotlin 中使用 Optional 模拟 `willReturn`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65393991/

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