Я подозреваю, что это должно параметризовать класс, а не метод.
Код в вопросе должен быть из класса, который не показан. Каждый экземпляр этого класса содержит список узлов. И, судя по методу, каждый класс содержит узлы определенного типа сообщения. Но метод a) требует, чтобы вызывающая сторона заранее знала, какой тип, и b) позволяет вызывать его в одном и том же экземпляре для разных типов, что не имеет смысла!
Вместо этого вы можете указать компилятору, что каждый экземпляр содержит узлы определенного типа, указав параметр типа в классе вместо метода:
class MyClass<T : Message> {
private val nodes: MutableList<TopicNode<T>>
init {
this.nodes = ArrayList()
}
private fun findNode(topic: String): TopicNode<T>? {
for (node in nodes) {
if (node.topic == topic) {
return node // No need to cast
}
}
return null
}
}
Таким образом, метод уже знает, к какому типу относятся его узлы, и может возвращать их напрямую.
Фактически, класс можно упростить до:
class MyClass<T : Message> {
private val nodes: MutableList<TopicNode<T>> = ArrayList()
private fun findNode(topic: String)
= nodes.find{ it.topic == topic }
}