我想在 Dart 中創建一個遞回 mixin。這是我嘗試過的:
mixin A<T extends Object> on Object {
List<Object?> get list;
List<Object?> get _list => [if (super is A) ...super._list, ...list];
}
但是這段代碼給了我一個資訊 lint,告訴我super總是A,但也._list沒有在super.
如果我嘗試通過這樣做來修復第二個 lint:
List<Object?> get _props => [if (super is A) ...(super as A)._props, ...props];
它給了我一個新的 lint 說這super as A是一個不必要的演員表。
我想在這里實作的是Mixin,當添加到基類時,_list將具有與list. 但是,當我從基類獲得擴展類時,如果我覆寫list,則此類_list會將基類list添加到新類中。
uj5u.com熱心網友回復:
您不能super在 Dart 中將其視為自己的物件,因此您嘗試的操作是不可能的,因為您無法確保存在super._list屬性。這是on通常的用途,但你不能讓 mixin 依賴于它自己。
一些替代方法是:
創建一個宣告
_list屬性的抽象類,并讓混入此 mixin 的類擴展它使 include
super的專案成為子類的責任,用package:meta'@mustCallSuper注釋表明這一點這是此類附加用例的常見模式 - 例如,Flutter 小部件大量使用它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/522169.html
標籤:扑镖递归混入
