はじめに
先日、Flutterで開発をしていてabstractを使った際に「Avoid defining a one-member abstract class when a simple function will do.」というWarningが出たのでメモ。
環境
- Flutter : 2.2.3
- Dart : 2.13.4
ワーニングの意味は?
one_member_abstracts
要するに、1つしか関数がないような抽象クラスの場合は、抽象クラスではなくファーストクラスの関数やクロージャを使えってことです。
対応方法
対応前
例をあげます。
以下のような抽象クラスがあったとして
abstract class Compare<E> {
bool compare(E a, E b);
}
派生クラスを作る場合は以下のようになります
class TestData extends Compare<int> {
@override
bool compare(int a, int b) {
return a == b;
}
}
そして使い方はこんな感じ
void test() {
final t = TestData();
print('${t.compare(1, 2)}');
}
この際に抽象クラスで「Avoid defining a one-member abstract class when a simple function will do.」のWarningがでます。
対応後
対応後は抽象クラスのabstractをやめて、typedefで宣言します。
typedef Compare<E> = bool Function(E a, E b);
そしてそれを利用するクラスを作成します。
class TestData<E> {
TestData(this.compare);
Compare<E> compare;
}
使い方はこんな感じ。
void test() {
final t = TestData<int>((int a, int b) {
return a == b;
});
print('${t.compare(1, 2)}');
}
さいごに
いずれメソッド等増やす予定ならば一旦は無視しても良いかも。
コメント