私は以下の方法を持っています。そのロジックは非常に簡単です。もしrightが設定されていれば、それは値(nullではない)を持っている間にleftを呼び出します。私が次のように書くと、うまくいきます。Kotlinコンパイラはdo-whileループで変数がnullableでないことを理解できません
fun goNext(from: Node): Node? {
var prev : Node = from
var next : Node? = from.right
if (next != null) {
prev = next
next = next.left
while (next != null) {
prev = next
next = next.left
}
}
return prev
}
、代わりに、私はDO-whileループを使用してコードを短くしようとすると、それはもはやスマートNode
にnext
をキャストしていません。これは、このエラーを示しています
Type mismatch.
Required: Node<T>
Found: Node<T>?
コードは次のとおりです。
fun goNext(from: Node): Node? {
var prev : Node = from
var next : Node? = from.right
if (next != null) {
do {
prev = next // Error is here, even though next can't be null
next = next.left
} while (next != null)
}
return prev
}
「while(next!= null){...}」だけに単純化してみませんか? –
あなたは正しいです!私はそれを見ませんでした。 – biowep