Kotlinのsealed classとcompanion objectを組み合わせて、状態遷移を効果的に管理する方法を紹介します。これは、特に状態マシンを構築する際に役立ちます。以下に、このアプローチを示す具体的なコードを提供します。
sealed class State {
abstract fun nextState(): State
companion object {
val initialState: State = StateA()
fun createStateMachine(): StateMachine {
return StateMachine(initialState)
}
}
}
data class StateA(val data: Int = 0) : State() {
override fun nextState(): State {
return StateB(data + 1)
}
}
data class StateB(val data: Int) : State() {
override fun nextState(): State {
if (data < 5) {
return StateA(data)
} else {
return StateC()
}
}
}
class StateC : State() {
override fun nextState(): State {
return this // 状態遷移の終了
}
}
class StateMachine(private var currentState: State) {
fun transition() {
currentState = currentState.nextState()
}
fun getCurrentState(): State {
return currentState
}
}
fun main() {
val stateMachine = State.createStateMachine()
for (i in 1..10) {
println("Current State: ${stateMachine.getCurrentState()}")
stateMachine.transition()
}
}
このコードでは、sealed classを使用して異なる状態を表し、それぞれの状態で次の状態への遷移を定義しています。また、companion objectを使用して初期状態の管理と状態マシンの作成を行っています。最後に、main関数で状態遷移を実行し、状態の変化を確認できます。
この方法を使用することで、複雑な状態遷移を効果的に管理でき、Kotlinの強力な型安全性を活用できます。