2

List はインターフェイスであり、拡張することはできませんが、実装する必要があるため、Map クラスを単純に「拡張」しようとすると失敗します。

目標は、次のような既存のクラスの上にいくつかのメソッドを追加することだけでした。

アイテムがまだ存在しない場合にのみ追加したい List.add_unique(item) 。これは、追加 !=null ロジックを List.indexOf(item) != -1 (-1 は notFound) で AND 処理することでうまく実行できます。これは良い例であり、理解しやすいでしょうか?

しかし、これを最短で全体的なオーバーヘッドを最小限に抑える方法で達成するにはどうすればよいでしょうか? ゆるいタイピングで大丈夫だと思います-少なくとも最初は。

Map クラスの .add() メソッドなど、追加または変更したい他のメソッドがあります。

私は何年もインターフェースを扱っていませんでしたが、私のプロジェクトのこの面を始めるには、全体的にもっと簡単な方法があるのではないかと考えています。

ありがとう!

4

1 に答える 1

2

私もこの問題にぶつかりました。現時点での最善の回避策は、すべてのメソッド呼び出しを転送するクラスを作成することです。次のようなもの: https://github.com/dart-lang/html5lib/blob/master/lib/src/list_proxy.dart

次に、ListProxy から継承し、必要なメソッドをオーバーライドまたは追加できます。

人々がこれを十分に便利だと思ったら、それを独自の pub パッケージに入れることができるかもしれません。ただし、dart:core を修正して、すべてのコア コレクション クラスからの継承をサポートできることを願っています。

ところで、Map でメソッドをオーバーライドしようとしている場合は、はるかに簡単import 'dart:coreimpl';ですHashMapImplementation

于 2012-10-17T00:28:38.267 に答える