companion object 의 내부에 있는 lateinit var 필드에 isInitialized 검사시의 NoSuchFieldError 에 대해

less than 1 minute read


companion object 의 내부에 있는 lateinit var 필드에 isInitialized 검사시의 NoSuchFieldError 에 대해


개요

안드로이드 개발도중 companion object 의 내부에 있는 lateinit var 필드에 접근해 isInitialized 검사를 했을때 java.lang.NoSuchFieldError: No field instance of type Lcom/... 에러가 발생한다.


문제원인

코틀린에 내부 버그로 이미 이슈가 올라와 있었다.


해결

  • 인텔리제이에서 코틀린 버전을 바꿔가면서 실행해본 결과 1.3.11, 1.3.21 버전 둘 다 에러가 발생하지 않았다.
  • 하지만 안드로이드의 경우 1.3.21 버전에서는 에러가 발생하지 않았으나 1.3.11 버전에서 에러가 발생하였다.
  • 처음에 에러를 발견한 것도 1.3.11 버전에서 였다.
  • stackoverflow 에 있는 래퍼형식의 솔루션도 isInitialized 호출되는 순간 죽는다.


결론 : 1.3.21 버전을 사용하자(1.3.30 은 현재 버그가 존재한다고 한다).