I am studying Android and I am also studying Kotlin.
While writing Android code, I was curious about using it
in a let
function.
MainActivity.kt
class MainActivity : AppCompatActivity() {
private var curFrag: Fragment? = null
curFrag = fm.primaryNavigationFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// curFrag?.let { transaction.hide(curFrag) } // error.
curFrag?.let { transaction.hide(it) }
}
}
ERROR
Smart cast to 'Fragment' is impossible, because 'curFrag' is a mutable property that could have been changed by this time
In the lambda expression of let()
, T
is curFrag
and the type is Fragment?
is.
And T(curFrag)
can be replaced by it
.
But the moment I used curFrag
instead of it
, the IDE displayed an error message.
Later, when I checked the type of it
, it was Fragment?
It was not a Fragment
type.
Honestly, I don't understand well.
I don't know why it is automatically smart cast
and should only be used for immutable variables
.