私はコトリンを学んでいます。私のコードは次のとおりです:
_override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
decoupler.attachNotifier(this)
if(activity is ScreenRouter) {
decoupler.attachRouter(activity)
}
}
_
attachRouter()
メソッド:
_ fun attachRouter(router: ScreenRouter?) {
this.router = router
}
_
documentation で記述されているように、kotlinはis演算子でチェックした後、自動的に型にキャストされます。だから、私はそれがうまくいくと期待していました。しかし、代わりにそれはコンパイルエラーで私を悩ませています:
ScreenRouter
はオープンまたはカスタムのゲッターを持つプロパティであるため、activity
へのスマートキャストは不可能です。
エラーはおそらくアクティビティがnull可能になる可能性があるためだと思ったので、試してみました:
_if(activity!=null && activity is ScreenRouter) {
decoupler.attachRouter(activity)
}
_
しかし、それは機能せず、コンパイルは同じエラーで失敗しました。
ただし、次のコードは正常に機能します。
_if(activity is ScreenRouter) {
decoupler.attachRouter(activity as ScreenRouter)
}
_
その大丈夫ですが、上記のエラーは、スマートキャストが失敗する理由について何も説明していないようです。私はKotlinのエキスパートではありません。私はKotlinを学ぶ初心者です。ドキュメントはどこにも見つかりませんでした。これらの種類のエラーの説明は、Kotlinを学ぶのを恐ろしくします。誰かが簡単な言葉で説明できますか?
nullableオブジェクトであるアクティビティを直接使用する代わりに、私はこれを行いました
activity?.let{
if(it is ScreenRouter) {
decoupler.attachRouter(it)
}
}