ひしだまの変更履歴

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

Java18 デフォルトのキャラセットがUTF-8になった

2022-03-23 19:27:00 | PG(Java)

Java18が出たので、例によって調査。

今回一番大きいのは、デフォルトのキャラセット(ファイルのエンコーディング)がUTF-8になったことでしょう。
今までは環境依存(WindowsならMS932)だったので。
ただ、主に影響を受けるのは旧来のInputStreamReaderやOutputStreamWriterを使ってファイルを読み書きするときであって、nio2(PathやFiles)は最初からデフォルトはUTF-8でファイルを読み書きするようになっているから、あまり関係ない(はず)だけど^^;

コメント
  • 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でシェアする

Java17 プレビュー版switchのパターンマッチング

2021-09-20 00:44:55 | PG(Java)

2021/9/15にJava17が出たので、例によって変更点を見てみました。

久しぶりのLTSなのに(LTSだからか)、あまり大きな変更点は無い印象ですね。
シールクラスが正式版になったくらい。

と思っていたら、プレビュー版にswitchのパターンマッチングが来てましたね。
instanceofのパターンマッチと同様なものがcaseに指定できるのは、ある種のコードを書くにはすごく便利です。
でもまぁ全般的に使われる機能じゃないし…と思ったんですが、これに関連してか、
caseにnullが指定できるようになるんですね!これを待ってました!
さらに、caseにdefaultが指定できるようになります。アロー構文「->」で他の値とdefaultをカンマ区切りで一緒に宣言できるようになるので、とても便利です。

また、プレビュー版ではシールクラスをswitchに指定できます。
正式版のシールクラスのみではあまり意味が無い感じだったんですが、switchでは網羅チェックがされるので、意味が出てきますね。

あ、あとHexFormatクラスが新設されてます。(何故このタイミングで^^;)
今後は、十六進数の文字列を扱いたい場合は、これを使うのが良さそうです。

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

Java16 mapMulti

2021-03-21 21:26:11 | PG(Java)

2021/3/16にJava16が出たので、例によって変更点を見てみました。

皆が注目しているrecordパターンマッチングinstanceofは、まぁいいとして。

きしださんのサイトに載っていた「内部クラスにstaticメンバーが書けるようになった」のって、注目されてないけど意外と大きいと思います。
内部クラスにstaticメソッド、たまに定義したかったんですよねw

Streamに追加されたことで注目されているtoListも確かに便利そうですが。
不変リストなので、可変リスト版も欲しかったところ。今後追加されたら、どういうメソッド名になるのやら^^;

それより、桜庭さんのサイトに載っていたことで初めて知ったのがStreamのmapMultiメソッドです。
桜庭さんのサンプルを見てもいまいちぴんと来なかったんですが、実際に試してみて分かりました。
これは、faltMapと機能は同等で、形式が異なるメソッドなんですね。
・flatMapは、「変換された値を持つStream」を返す形
・mapMultiは、変換された値を「consumerに登録していく」形
Streamを作るのが面倒な場合は、flatMapよりmultiMapの方が便利そうです。
(flatMapでいちいちStreamを作るのが面倒…と批判されていたことに対する答えが、mapMultiなのでしょう)
ただし、flatMapは返す型が引数で分かるので型推論可能ですが、mapMultiのConsumerは型推論できないので型引数を明示しないといけない事があるのが、ちょっと残念な点ですね…。

あと、Integer等のプリミティブ型のラッパークラスのコンストラクターが、Java9から非推奨になっていたらしいんですが、Java16で削除対象(forRemoval=true)になったんですね。
自分はInteger等のコンストラクターは使わないけど、使ってるコードは多そうなので、本当に削除されたらけっこう影響が大きそうですね^^;

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

JDBC PreparedStatement

2021-02-10 23:59:59 | PG(Java)

久しぶりに生JDBCのPreparedStatementを書こうと思ったら、細かい部分を忘れていたので、改めてメモ

以前書いていたメモは中途半端にexecuteUpdateとexecuteBatchしか無かったので、executeQueryも追加。
あと最終更新は10年前で^^;try-with-resources構文を使ってなかったので、使うよう修正。

Java8で日付時刻APIが追加になって、既にJava15の時代だというのに、PreparedStatementやResultSetはまだ日付時刻APIに対応していないようだ。
(今の時代に生JDBC使うことはまず無いんだろうけど^^;)
しかしjava.sql.DateにはLocalDateとの変換メソッドが追加されていた。これは知らなかったので、メモした。

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