Kotlin集合图导致“types检查已经运行成Kotlin递归”错误

我有2个类让我们叫他们A和B,我也有一个function,将A的实例转换为B的实例。

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

fun fromAtoB(a: A) = B (fb1 = a.fa1, fb2 = a.fa2, fb3 = a.fa3) val listOfA: List = ... val listOfB: listOfA.map { fromAtoB(it) } 

这不会建立由于行:

 fromAtoB(it) 

随着错误:

由于错误types检查已经遇到了递归问题。 最简单的解决方法:明确指定声明的types

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

提前感谢任何帮助!

编辑:

这里是实际的源文件:

  • TenantEntity.kt – https://pastebin.com/mdSWiA1Y (该文件的第51行是问题)
  • TenantDto.kt – https://pastebin.com/83UP9Cwe
  • ReceiptEntity.kt – https://pastebin.com/BjP2ikg9
  • ReceiptDto.kt – https://pastebin.com/Kpt9dSAp

这种types的问题意味着编译器无法推断出listOfB应该是什么types,因为你的定义中有一个递归调用。 这很好奇,因为我在你的代码中看不到任何代码,但是也许你无意中排除了有问题的代码。 无论如何,这个问题通常是通过做错误消息建议的手段来解决的,手动指定返回types如下所示:

 val listOfB: List = listOfA.map { fromAtoB(it) } 

编辑 :在尝试真正的代码后,我刚刚预感到,并改变TenantEntity.kt从第45行:

 fun fromDto(dto: TenantDto) = TenantEntity ( 

对此:

 fun fromDto(dto: TenantDto): TenantEntity = TenantEntity ( 

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

第二次编辑 :在进一步检查之后,您将使用此代码运行到StackOverflowException,这最终是编译器无法解析types的原因。 当你调用TenantEntity.fromDto(...) ,这将调用ReceiptEntity.fromDto(...) ,它将依次调用TenantEntity.fromDto(...) ,并返回到永恒(或堆栈限制) 。 这不可行,你需要在那里修改你的逻辑。