extension_type_inherited_member_conflict 진단: 구현한 타입들의 멤버가 충돌할 때

extension_type_inherited_member_conflict 진단: 구현한 타입들의 멤버가 충돌할 때

Dart 분석기가 내보내는 진단에는 이름이 있어요. extension_type_inherited_member_conflict확장 타입(extension type)이 두 개 이상의 타입을 implements하는데, 그중 적어도 두 타입이 같은 이름의 멤버를 선언할 때 분석기가 알려주는 컴파일 타임 진단이에요.

출처: extension_type_inherited_member_conflict

본문

설명

분석기는 확장 타입이 두 개 이상의 다른 타입을 implements하고, 그중 적어도 두 타입이 같은 이름으로 멤버를 선언하면 이 진단을 만들어요.

예시

다음 코드는 확장 타입 CAB를 모두 implements하는데 두 타입이 모두 m이라는 이름의 멤버를 선언하기 때문에 이 진단이 나와요.

class A {
  void m() {}
}
extension type B(A a) {
  void m() {}
}
extension type C(A a) implements A, B {}

흔한 해결 방법

확장 타입이 나열된 타입을 전부 implements할 필요가 없다면, 충돌하는 멤버를 도입하는 타입들 중 하나만 남기고 나머지를 삭제해요.

class A {
  void m() {}
}
extension type B(A a) {
  void m() {}
}
extension type C(A a) implements A {}

확장 타입이 나열된 타입을 모두 implements해야 하지만 해당 타입들의 멤버 이름을 바꿀 수 있다면, 충돌하는 멤버에 서로 다른 이름을 붙여요.

class A {
  void m() {}
}
extension type B(A a) {
  void n() {}
}
extension type C(A a) implements A, B {}

더 알아보기