E131: Lazy Static Field — lazy val을 static으로
E131: Lazy Static Field — lazy val을 static으로
lazy val에 @static을 붙였을 때 발생하는 에러예요.
본문
lazy val에 @static을 붙였을 때 발생해요.
Scala의 @static 어노테이션은 멤버를 JVM 레벨의 static 필드로 노출시켜줘요. 하지만 lazy 값은 스레드 안전한 초기화를 위한 래퍼 코드가 필요한데, 이건 단순한 static 필드로는 표현할 수 없어요. 그래서 JVM의 static 필드 초기화 메커니즘이 Scala의 lazy 초기화 의미론과 맞지 않아서, lazy 값을 @static으로 만들 수는 없어요.
예시
import scala.annotation.static
class Example
object Example:
@static lazy val count: Int = 0
에러
-- [E131] Syntax Error: example.scala:6:19 -------------------------------------
6 | @static lazy val count: Int = 0
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| Lazy @static fields are not supported
해결 방법
lazy가 아닌 @static val을 쓰면 돼요.
// Use a non-lazy @static val
import scala.annotation.static
class Example
object Example:
@static val count: Int = 0
lazy로 유지하고 싶다면 @static을 제거하면 되고요.
// Alternative: Keep it lazy but remove @static
import scala.annotation.static
class Example
object Example:
lazy val count: Int = 0