Kotlin收集地图导致类型检查已经在Kotlin中进入递归状态'错误

时间:2017-11-17 12:24:09

标签: 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) }

由于这条线路,这不会构建:

fromAtoB(it)

错误:

  

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

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

提前感谢您的帮助!

修改

以下是实际的源文件:

1 个答案:

答案 0 :(得分:5)

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

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

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

fun fromDto(dto: TenantDto) = TenantEntity (

到此:

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

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

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