Допустим, у меня есть
enum class ConceptualPosition{
A1,A2,A3,A4,A5,A6,A7,A8,
B1,B2,B3,B4,B5,B6,B7,B8,
C1,C2,C3,C4,C5,C6,C7,C8
}
И теперь я хочу построить график, в котором каждая позиция имеет узел.
import [...].domain.model.base.ConceptualPosition
import [...].domain.model.base.ConceptualPosition.*
import [...].domain.model.base.Node
import [...].domain.model.base.Node.MovableDirection.*
class MyGraph:Graph{
private val internalPositions = mutableMapOf<ConceptualPosition, Node>()
override val position by lazy {internalPositions.toMap().withDefault {
throw IllegalArgumentException("position '$it' does not exist")
}}
init{
//create nodes for all positions
ConceptualPosition.values().forEach { internalPositions[it] = Node(it) }
//now build graph
position[A1]!!.connectBothWaysWith(position[A2]!!,RIGHT)
position[A2]!!.connectBothWaysWith(position[A3]!!,RIGHT)
[...]
}
}
, поскольку у меня есть withDefault
, который сразувыдает исключение, и поскольку Котлин правильно выводит тип position
как Map<ConceptualPosition,Node>
, я думаю, что могу быть вполне уверен, что если поиск не завершится неудачей, я получу из него ненулевое значение.
Очевидно, что Котлин не может сделать вывод, что это безопасно.
Могу ли я реорганизовать это (разумным образом), чтобы избавиться от !!
?