ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

AsakusaFW Viewから1レコード取得する方法

2021-12-18 23:34:16 | PG(分散処理)

AsakusaFW & Tsurugi Advent Calendar 2021の18日目です。

AsakusaFWにはViewというものがあって、少量データが対象ですが、ユーザー演算子でデータを自由に読むのに使えます。(GroupViewはキーあり、Viewはキー無しという位置づけ)
Viewは複数レコードを対象としていて、JavaのIterableを継承しているので、Iteratorパターンやfor文でループして扱うのが基本です。

for(Iterator i = view.iterator(); i.hasNext();;) {
  DataModel model = i.next();
  ~
}

for(DataModel model : view) {
  ~
}

一方、Viewは読み込み専用のグローバル変数のようなものを扱いたいときに便利で、そういう使い方をするときは、必ず1レコードだけ存在していると想定してよいでしょう。
そうすると、わざわざループで1レコード取得するのはちょっと冗長です。
ViewはIteratorを取得できるので、view.iterator().next();として1レコード取得したいところですが、AsakusaFWのViewはhasNext()を必ず呼ぶ想定になっているようで、例外が発生してしまいますorz
(この事象はけっこう昔に発見していて、もう直ってると思っていたのに、直っていなかったようですorz)
現状では、地道にループさせるしか方法が無いようです。(ループして1レコードだけ返すメソッドを用意しておけばいい話ではありますが^^;)

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

static importできないメソッド

2021-12-18 18:32:33 | PG(Java)

Java Advent Calendar 2021の17日目です。

Asakusa Frameworkという、Javaで分散処理して高速化するバッチアプリケーションを開発・実行するフレームワークがあります。

AsakusaFWでは、Operatorと呼ぶクラスをJavaでコーディングするのですが、このOperatorクラスは他クラスから継承してはいけないことになっています。(継承すると警告が出る)
個人的には、共通的に使われる便利メソッドを親クラスに定義しておいて、子クラスから呼び出すのが好きなんですが、オブジェクト指向原理主義者からは糾弾される行いみたいですねorz
親クラスに書いておけば、同名メソッドをオーバーライドして特別な場合だけ別処理にすることも出来て便利なんですけどねぇ。

そういうメソッドはstatic importしろということらしいです。
ところが、JavaではtoStringという名前のメソッドはstatic importできないらしいです!!
「String toString(Hoge hoge)」こそ、用意しておきたいメソッドだったのにぃ!

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする