我有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)
错误:
由于错误,类型检查遇到了递归问题。最简单的解决方法:明确指定声明的类型
我不知道我能做些什么来解决这个问题,谷歌没有提供似乎适用于我的问题的结果......
提前感谢您的帮助!
修改
以下是实际的源文件:
答案 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(...)
,然后再拨回“永久”(或堆叠限制)。这不起作用,你需要在那里修复你的逻辑。