Kotlin集合映射导致'类型检查已经运行到Kotlin中的递归'错误

leu*_*s95 0 kotlin

我有2个类让我们称它们为A和B,我也有一个函数将A的实例转换为B的实例.

导致问题的代码基本上是:

fun fromAtoB(a: A) = B (fb1 = a.fa1, fb2 = a.fa2,  fb3 = a.fa3) 

val listOfA: List<A> = ...
val listOfB: listOfA.map { fromAtoB(it) }
Run Code Online (Sandbox Code Playgroud)

由于该行,这将无法构建:

fromAtoB(it)
Run Code Online (Sandbox Code Playgroud)

有错误:

由于错误类型检查遇到了递归问题.最简单的解决方法:明确指定声明的类型

我不知道我能做些什么来解决这个问题,谷歌没有提供似乎适用于我的问题的结果......

在此先感谢您的帮助!

编辑:

以下是实际的源文件:

Rob*_*bin 5

这种类型的问题意味着编译器无法推断listOfB应该是什么类型,因为您在其定义中的某处有一个递归调用.这很奇怪,因为我在您的示例代码中看不到任何内容,但也许您无意中遗漏了有问题的代码.无论如何,通常通过执行错误消息建议解决此问题,手动指定返回类型,如下所示:

val listOfB: List<B> = listOfA.map { fromAtoB(it) }
Run Code Online (Sandbox Code Playgroud)

编辑:在尝试真正的代码之后,我只是在预感之后改变了TenantEntity.kt中的第45行:

fun fromDto(dto: TenantDto) = TenantEntity (
Run Code Online (Sandbox Code Playgroud)

对此:

fun fromDto(dto: TenantDto): TenantEntity = TenantEntity (
Run Code Online (Sandbox Code Playgroud)

而错误消失了.我不确定为什么,但现在应该编译.

第二次编辑:进一步检查后,您将使用此代码遇到StackOverflowException,这最终导致编译器无法解析该类型.当你打电话时TenantEntity.fromDto(...),它会调用ReceiptEntity.fromDto(...),然后再调用TenantEntity.fromDto(...),然后再调用,进入永久性(或堆栈限制).这不会起作用,你需要在那里修复你的逻辑.