E216: Unnecessary .nn
E216: Unnecessary .nn
이 경고는 .nn(not null) 메서드를 불필요하게 사용했을 때 발생해요. 이 경고는 -Yexplicit-nulls 컴파일러 플래그로 명시적 null을 활성화했을 때만 나타나요.
본문
.nn 메서드는 nullable 값이 null이 아님을 단언해서 T | Null을 T로 변환하는 데 사용돼요. 하지만 두 가지 경우에는 불필요해요.
- 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"