no_combined_super_signature 진단: 오버라이드된 메서드로 타입을 추론할 수 없을 때
no_combined_super_signature 진단: 오버라이드된 메서드로 타입을 추론할 수 없을 때
Dart 분석기가 내보내는 진단에는 이름이 있어요. no_combined_super_signature는 메서드 선언에서 빠진 타입을 추론해야 하는데, 오버라이드된 메서드들의 함수 타입 중 어떤 것도 나머지를 모두 포함(supertype)하지 않아서 타입을 추론할 수 없을 때 분석기가 알려주는 진단이에요.
본문
설명
분석기는 메서드 선언이 있는데 그 안의 타입 하나 이상을 추론해야 하고, 오버라이드된 메서드들 중 어느 것도 다른 모든 오버라이드된 메서드들의 함수 타입의 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);
}
이 예시에서 오버라이드 추론이 불가능한 이유는 두 오버라이드된 메서드가 이런 식으로 서로 맞지 않기 때문이에요.
- 파라미터 타입(
String과int) 중 어느 것도 다른 쪽의 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);
}