У меня есть функция replaceCollection
, для замены которой требуется два MongoCollection<T>
.
Объявление функции выглядит следующим образом.
private suspend fun <T> replaceCol(old: MongoCollection<T>, new: MongoCollection<T>, session: ClientSession)
Работает нормально, когда я добавляю два MongoCollection<SameClass>
в функцию. Тем не менее, у меня есть список коллекций, которые я хотел бы заменить, но я не могу найти способ приведения <out Any>
, чтобы гарантировать компилятору, что они имеют одинаковый тип, так что его можно запустить в функции generi c replaceCol
//oldCols[i] and newCols[i] always have the same generic type
val oldCols: Array<MongoCollection<out Any>> = ...
val newCols: Array<MongoCollection<out Any>> = ...
for(i in prodCols.indices) {
replaceCol(preProdCols[i], prodCols[i], session)
}
/* error on the line of replaceCol
Type inference failed: Cannot infer type parameter T in //...
None of the following substitutions
(
MongoCollection<CapturedTypeConstructor(out Any)>,
MongoCollection<CapturedTypeConstructor(out Any)>,
ClientSession
)
(
MongoCollection<CapturedTypeConstructor(out Any)>,
MongoCollection<CapturedTypeConstructor(out Any)>,
ClientSession
)
can be applied to
(
MongoCollection<out Any>,
MongoCollection<out Any>,
ClientSession!
)
*/