Je programmment en flutter en utilisant Dart 2.1.0 et rencontrez cette situation:
mixin Salt {
final int pinches; // Immutable, and I want to delay initialization.
// Cannot declare constructors for mixin
}
class Meat with Salt {
Meat(int pinches) ... // How to initialize it?
}
Salt
n'a pas de constructeur, donc je ne peux pas utiliser la liste d'initialistes. pinches
est final
, donc je ne peux donc pas la définir dans Meat
'S' S.
Je ne veux pas faire Salt
une classe parce que Meat
peut avoir besoin de prolonger quelque chose d'autre.
Et je veux garder pinches
immuable.
Toute façon de le faire? Merci d'avance.
Semblable à la suggestion de Atdona, mais un peu plus près de ce que vous vouliez vraiment, vous pourriez le faire comme
mixin Salt {
int _pinches;
int get pinches => _pinches;
void initSalt(int pinches) {
assert(_pinches == null);
_pinches = pinches;
}
}
class Meat with Salt {
Meat(int pinches) {
initSalt(pinches);
}
}
Ce n'est toujours pas strictement final, mais (tant que la mixin est dans une bibliothèque différente, vous ne pouvez donc pas changer directement le membre privé), il est immuable au moment de l'exécution. Pas aussi bon que si cela pourrait être correctement final, mais peut-être assez proche.