E216: Unnecessary .nn

E216: Unnecessary .nn

이 경고는 .nn(not null) 메서드를 불필요하게 사용했을 때 발생해요. 이 경고는 -Yexplicit-nulls 컴파일러 플래그로 명시적 null을 활성화했을 때만 나타나요.

출처: Scala 3 Reference

본문

.nn 메서드는 nullable 값이 null이 아님을 단언해서 T | NullT로 변환하는 데 사용돼요. 하지만 두 가지 경우에는 불필요해요.

  • Qualifier is already not null: 값이 이미 non-nullable 타입이라면 .nn을 호출해도 효과가 없어요.
  • Expected type admits null: 기대 타입이 이미 null 값을 허용한다면 non-null 단언은 의미가 없어요.

예시 (Example)

qualifier가 이미 null이 아닌 경우를 보여줘요.

//> using options -Yexplicit-nulls

def example: String =
  val s: String = "hello"
  s.nn

에러 (Error)

-- [E216] Syntax Warning: example.scala:5:4 ------------------------------------
5 |  s.nn
  |  ^^^^
  |  Unnecessary .nn: qualifier is already not null

해결 방법 (Solution)

불필요한 .nn 호출을 제거해요.

//> using options -Yexplicit-nulls

def example: String =
  val s: String = "hello"
  s

기대 타입이 null을 허용하는 경우에는, 이후 연산을 위해 타입을 좁혀야 할 때만 .nn을 사용해요.

//> using options -Yexplicit-nulls

def example: String =
  val s: String | Null = getSomeValue()
  s.nn  // necessary to convert String | Null to String

def getSomeValue(): String | Null = "value"