no_combined_super_signature 진단: 오버라이드된 메서드로 타입을 추론할 수 없을 때

no_combined_super_signature 진단: 오버라이드된 메서드로 타입을 추론할 수 없을 때

Dart 분석기가 내보내는 진단에는 이름이 있어요. no_combined_super_signature메서드 선언에서 빠진 타입을 추론해야 하는데, 오버라이드된 메서드들의 함수 타입 중 어떤 것도 나머지를 모두 포함(supertype)하지 않아서 타입을 추론할 수 없을 때 분석기가 알려주는 진단이에요.

출처: no_combined_super_signature

본문

설명

분석기는 메서드 선언이 있는데 그 안의 타입 하나 이상을 추론해야 하고, 오버라이드된 메서드들 중 어느 것도 다른 모든 오버라이드된 메서드들의 함수 타입의 supertype이 되지 않아 추론을 할 수 없을 때 이 진단을 만들어요. 이 추론 규칙을 '오버라이드 추론(override inference)'이라고 불러요.

예시

아래 코드는 클래스 C에 선언된 메서드 m에 반환 타입과 파라미터 a의 타입이 둘 다 빠져 있는데, 둘 중 어느 타입도 추론할 수 없어서 이 진단을 만들어요.

abstract class A {
  A m(String a);
}

abstract class B {
  B m(int a);
}

abstract class C implements A, B {
  m(a);
}

이 예시에서 오버라이드 추론이 불가능한 이유는 두 오버라이드된 메서드가 이런 식으로 서로 맞지 않기 때문이에요.

  • 파라미터 타입(Stringint) 중 어느 것도 다른 쪽의 supertype이 아니에요.
  • 반환 타입 중 어느 것도 다른 쪽의 subtype이 아니에요.

흔한 해결 방법

가능하다면 하위 클래스의 메서드에, 오버라이드된 모든 메서드들의 타입과 일관된 타입을 추가해요.

abstract class A {
  A m(String a);
}

abstract class B {
  B m(int a);
}

abstract class C implements A, B {
  C m(Object a);
}

더 알아보기