invalid_override_of_non_virtual_member 진단: non-virtual로 선언된 멤버는 서브클래스에서 오버라이드할 수 없어요
invalid_override_of_non_virtual_member 진단: non-virtual로 선언된 멤버는 서브클래스에서 오버라이드할 수 없어요
Dart 분석기가 내보내는 진단에는 이름이 있어요. invalid_override_of_non_virtual_member는 클래스·mixin·enum의 멤버가 @nonVirtual 어노테이션이 붙은 멤버를 오버라이드할 때 분석기가 알려주는 컴파일 타임 진단이에요. @nonVirtual로 선언된 멤버는 서브클래스에서 오버라이드할 수 없어요.
본문
설명
분석기는 클래스, mixin, enum의 멤버가 @nonVirtual 어노테이션이 붙은 멤버를 오버라이드할 때 이 진단을 만들어요.
예시
다음 코드는 B의 메서드 m이 A의 메서드 m을 오버라이드하고, A의 메서드 m이 @nonVirtual 어노테이션으로 표시되어 있기 때문에 이 진단을 만들어요.
import 'package:meta/meta.dart';
class A {
@nonVirtual
void m() {}
}
class B extends A {
@override
void m() {}
}
흔한 해결 방법
슈퍼클래스의 메서드에 붙은 어노테이션이 맞다면(즉, 슈퍼클래스의 메서드를 오버라이드하려는 의도가 아니라면), 오버라이드하는 메서드를 제거하거나 이름을 바꿔요.
import 'package:meta/meta.dart';
class A {
@nonVirtual
void m() {}
}
class B extends A {}
슈퍼클래스의 메서드를 오버라이드하려는 의도라면 @nonVirtual 어노테이션을 제거해요.
class A {
void m() {}
}
class B extends A {
@override
void m() {}
}