sealed 클래스는 mixin 제약으로 쓸 수 없어요
sealed 클래스는 mixin 제약으로 쓸 수 없어요
다른 패키지에서 sealed로 표시된 클래스는 상속·구현·mixin·superclass 제약으로 사용할 수 없어요. 그런 클래스를 mixin의 superclass 제약으로 쓰면 이 진단이 발생해요.
본문
설명
mixin의 superclass 제약이 다른 패키지에서 온, sealed로 표시된 클래스일 때 analyzer가 이 진단을 만들어요. sealed 클래스는 확장, 구현, mixin, superclass 제약으로 사용할 수 없어요.
예시
먼저 패키지 p에서 sealed 클래스를 정의해요.
import 'package:meta/meta.dart';
@sealed
class C {}
그리고 p가 아닌 다른 패키지에서 아래처럼 쓰면 진단이 발생해요.
import 'package:p/p.dart';
mixin M on C {}
해결 방법
mixin을 쓰는 클래스들이 sealed 클래스의 하위 클래스가 될 필요가 없다면, 필드를 하나 추가하고 sealed 클래스의 인스턴스를 감싸서 위임하는 방식(composition)을 고려해 볼 수 있어요.
더 알아보기
sealed클래스의 제약에 대해서는 Dart 언어 문서의 sealed 클래스 내용을 함께 보면 좋아요.