collection_methods_unrelated_type 진단: 타입과 관련 없는 인자 전달

collection_methods_unrelated_type 진단: 타입과 관련 없는 인자 전달

Dart 분석기가 만들어 내는 collection_methods_unrelated_type 진단에 대한 설명이에요.

출처: collection_methods_unrelated_type

본문

코어 라이브러리에 있는 몇몇 메서드를 부적절한 타입의 인자로 호출하면 분석기가 이 진단을 만들어요. 이런 메서드들은 파라미터에 충분히 구체적인 타입을 주지 않아서, 일반적인 타입 검사만으로는 오류를 잡아내기 어려운 경우예요.

검사되는 인자들은 다음과 같아요.

  • Iterable<E>.contains의 인자는 E와 관련되어 있어야 함
  • List<E>.remove의 인자는 E와 관련되어 있어야 함
  • Map<K, V>.containsKey의 인자는 K와 관련되어 있어야 함
  • Map<K, V>.containsValue의 인자는 V와 관련되어 있어야 함
  • Map<K, V>.remove의 인자는 K와 관련되어 있어야 함
  • Map<K, V>.[]의 인자는 K와 관련되어 있어야 함
  • Queue<E>.remove의 인자는 E와 관련되어 있어야 함
  • Set<E>.lookup의 인자는 E와 관련되어 있어야 함
  • Set<E>.remove의 인자는 E와 관련되어 있어야 함

예시

다음 코드는 contains의 인자가 String인데, 리스트 l의 요소 타입인 int에 대입할 수 없어서 이 진단을 만들어요.

bool f(List<int> l) => l.contains('1');

흔한 해결 방법

요소 타입이 맞다면, 인자를 같은 타입으로 바꿔주면 돼요.

bool f(List<int> l) => l.contains(1);

인자 타입이 맞다면, 요소 타입을 바꿔주면 돼요.

bool f(List<String> l) => l.contains('1');

더 알아보기