Привет общение stackoverflow,
Я написал метод с использованием обобщенных c типов. И у меня странное ощущение, что это немного сложно. На inte rnet я нашел концепцию контрастной дисперсии и дисперсии для обобщенных c типов. Но мои попытки сделать это правильно не увенчались успехом. Есть ли способ избавиться от второго (избыточного) универсального c Типа K?
fun <T, K> add(item: TreeItem<K>, startParent: TreeItem<T>, levelIndices: List<Int>) where K : T {
var currentParent = startParent
for ((counter, levelIndex) in levelIndices.withIndex()) {
if (counter == levelIndices.size - 1) {
@Suppress("UNCHECKED_CAST")
currentParent.children.add(levelIndices.last(), item as TreeItem<T>)
break
}
val positionEntryController = currentParent.children[levelIndex].value
if (positionEntryController is PositionHeaderController) {
currentParent = currentParent.children[levelIndex]
} else {
throw NotImplementedError()
}
}
}
Важнейшая строка находится под @Suppress("UNCHECKED_CAST")
, где я должен явным образом привести.