sealed 클래스는 mixin 제약으로 쓸 수 없어요

sealed 클래스는 mixin 제약으로 쓸 수 없어요

다른 패키지에서 sealed로 표시된 클래스는 상속·구현·mixin·superclass 제약으로 사용할 수 없어요. 그런 클래스를 mixin의 superclass 제약으로 쓰면 이 진단이 발생해요.

출처: mixin_on_sealed_class

본문

설명

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)을 고려해 볼 수 있어요.

더 알아보기