ScalaでJDBCResultSetのラッパーを作成します。
このラッパーは関数として使用することを目的としていますResultSet => ParticularType
。
問題は、マルチマップを作成するための一般的な解決策が見つからないことです。
コレクションを取得する方法は次のとおりです。
抽象クラスCollectionCreator[C]extends(ResultSet => C){ def apply(rs:ResultSet):C = { {append(rs)} while(rs.next)を実行します returnCollection() } def append(rs:ResultSet) def returnCollection():C }
次はマップの作成です。これはコレクション作成の実装であり、マップが非抽象的であるため抽象的ではありません(私の実装では常にHashMapでバックエンドされています)。
私の意見では、次のようになります。
クラスMapCreator[K、IV](keyCreator:ResultSet => K、valueCreator:ResultSet => IV) CollectionCreator [Map [K、Place forV]]{を拡張します タイプV=IV val IntermediateMap = new HashMap [K、V] def append(rs:ResultSet){をオーバーライドします appendToMap(keyCreator(rs)、valueCreator(rs)) } def appendToMap(key:K、value:IV){ 中間マップ(キー)=値 } def returnCollection()をオーバーライドします:Map [K、V] = middleMap.toMap }
それが機能する場合は、ListMultiMapの作成を次のように記述します。
クラスListMultiMapCreator[K、IV](keyCreator:ResultSet => K、valueCreator:ResultSet => IV) MapCreator [K、Place for V](keyCreator、valueCreator){を拡張します タイプVをオーバーライド=リスト[IV] def appendToMap(key:K、value:IV){をオーバーライドします 中間マップ(キー)=中間マップ.get(キー)一致{ case Some(values)=> values。::(value) ケースなし=>リスト(値) } } }
問題は、その時点で宣言されていないため、でV
使用できないことです。
抽象型は良い解決策だと思いますが、それらを正しく扱う方法がわかりません。Place for V
そのようなコレクションを作成する正しい方法は何ですか?
また、クラス階層の上位ですでに定義されている抽象型をオーバーライドできるかどうかもわかりません。