Карта коллекций Котлин, вызывающая ошибку «Проверка типа в рекурсивной в Котлине»

У меня есть 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) 

С ошибкой:

Из-за ошибки Проверка типа столкнулась с рекурсивной проблемой. Простейшее обходное решение: явно указать типы ваших объявлений

Я не знаю, что я могу сделать, чтобы исправить это, 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

Этот тип проблемы означает, что компилятор не может определить, какой должен быть тип listOfB , потому что у вас есть рекурсивный вызов где-то в его определении. Это любопытно, поскольку я не вижу ни одного в вашем примере кода, но, возможно, вы случайно не указали нарушающий код. Как бы то ни было, эту проблему обычно решают, выполняя то, что предлагает сообщение об ошибке, вручную указывая тип возврата следующим образом:

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

Изменить : после попытки реального кода я просто пошел после догадки и изменил строку 45 в TenantEntity.kt:

 fun fromDto(dto: TenantDto) = TenantEntity ( 

к этому:

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

и ошибка исчезла. Я не совсем уверен, почему, но теперь он должен компилироваться.

Второе редактирование : при дальнейшем проверке вы будете сталкиваться с StackOverflowException с помощью этого кода, что в конечном итоге объясняется тем, почему компилятор не смог разрешить этот тип. Когда вы вызываете TenantEntity.fromDto(...) , это вызовет ReceiptEntity.fromDto(...) , который, в свою очередь, вызовет TenantEntity.fromDto(...) и обратно, в вечность (или предел стека) , Это не сработает, вам нужно исправить свою логику.