Dans le code ci-dessous, j'ai du mal à organiser correctement l'entrée/la sortie, de sorte que les deux opérations de() et() fonctionnent comme prévu. J'ai essayé de commuter in/out dans les propriétés et les paramètres de fonction, mais toujours avec des erreurs de frappe incorrectes.Comment faire l'inférence de type Kotlin à partir de la réflexion KClass?
class KStateMachine(private val states: List<StateHandler>) {
var currentState: KClass<out StateHandler>
private set
private val handlers:HashMap<KClass<in StateHandler>, Int> = HashMap()
init {
currentState = states[0]::class
for (i in 0..states.size - 1) {
handlers.put(states[i]::class, i)
}
}
fun goto(toState: KClass<in StateHandler>) {
var index = handlers.get(toState)
if (index != null) {
var oldState = currentState
currentState = toState
states.get(index).from(oldState)
} else {
throw RuntimeException("to state unknown")
}
}
inline fun <reified T: StateHandler> goto() {
goto(T::class)
}
abstract class StateHandler {
abstract fun from(fromState: KClass<in StateHandler>)
}
}
Tout ce que je avais besoin, merci! – Martin