Smart Cast시 val 프로퍼티
에 대한 설명은 아래처럼 공식 문서에 기술되어 있다.
val properties - if the property is private or internal or if the check is performed in the same module where the property is declared. Smart casts cannot be used on open properties or properties that have custom getters.
출처 : https://kotlinlang.org/docs/typecasts.html#smart-casts
설명 중에 동일 모듈
에 대한 언급은 있지만, 어느 정도인지 다시 체크해 봤다.
간단하게 함수의 파라미터로 전달한 클래스 내에 nullable List 타입 프로퍼티 정보가 있다. null 체크 후 map 함수를 호출하는 코드를 동작시켜 봤다.
// 다른 모듈에 정의
data class AnotherSample(
val list: List<String>?
)
// 아래 test 함수와 동일한 모듈에 작성
data class SameSample(
val list: List<String>?
)
fun test(
same: SameSample
) {
if (same.list == null) return
val result = same.list.map { // ⬅ 정상적으로 Smart Cast
it
}
println(result)
}
fun test(
another: AnotherSample
) {
if (another.list == null) return
val result = another.list.map { // ⬅ 컴파일 에러 발생
it
}
println(result)
}
빌드 결과
file:///Users/pluu/AndroidStudioProjects/ModuleSmartCastSample/app/src/main/java/com/pluu/kotlin/Test.kt:19:18 Smart cast to ‘List
' is impossible, because 'another.list' is a public API property declared in different module
comments powered by Disqus
Subscribe to this blog via RSS.
LazyColumn/Row에서 동일한 Key를 사용하면 크래시가 발생하는 이유
Posted on 30 Nov 2024