どうもDartではmixinに実装しているstaticメソッドがそのまま呼べるっぽい。クラスに割り当てなくても。(Dart2.7現在)
普通、mixinは下記のような感じでclassと組み合わせてclassを拡張させて使うもの。
mixin Mixi {
void test() {
debugPrint('aaaa');
}
}
class Tekito with Mixi {
}
元々の経緯として、普通にmixinを使ってclassを拡張しようと思っていた。ただ、型の関係で色々ややこしかったのでやめにして、staticメソッドをたくさん実装したクラスを作ってそれを呼ぶだけにしよう、と思い、途中からクラスに変えてstaticメソッドを実装していった。
それでなんだかんだで実装を進めていった。ところが、ある時ふと見直してみると、mixinのままになっていた。classに変えるのを忘れている。ところが、いままで実装したところは全部問題なく動いている。
つまり、mixinのstaticメソッドは直接呼べてしまうっぽい。
なぜかはよくわからないが、そもそもDart1の時はmixinを定義する時にmixin MixinName
という感じでmixinという構文でmixinを定義する方法が無かった。普通にクラスとして定義することで、mixinとしても使える、という仕様だったっぽい。おそらくその名残でclassっぽい動きも残ってしまっているのではないかと思う。多分。
ちなみに、定義したmixinのインスタンスももしかしたら作れるのではないかと思ったがそれは無理だった。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント