ひしだまの変更履歴

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

Java23 マークダウン形式Javadoc

2024-09-22 22:45:13 | PG(Java)

最近Rustを勉強していたので(といってもj4rsを使ってJavaを呼び出して遊んでいたので、Javaから離れていたわけではないぞ(爆))、Java23が出たのに調査がちょっと遅れてしまった^^;

しかし、さくらばさんが『JEPでは語れないJava 23』で今回はそれほど変化は無いと書いている通り、APIの変更という意味では確かに目ぼしいものは無かった…。(だから今回きしださんはブログを書いてないのだろうか^^;)


でもそんな中で青天の霹靂だったのが、マークダウン形式Javadoc
プレビューも無かったし、そんなものが導入されるとは全く思ってなかった^^;

(ちなみにマークダウン形式Javadocは「/**~*/」ではなく「///」を使う。ちょうどRustを勉強していたので「Rustと同じじゃん!」と思ったけど、勉強してなかったら「なんだそりゃ」と思ったことだろう…)

最新版のEclipse(Java23プラグイン導入済み)だと「///」の行でEnterを押したら次の行も「///」を入れてくれるし、ポップアップでちゃんとJavadocとして表示してくれるので、十分便利だ。(まだ多少バグがあるようだけど、すぐに修正されていくだろう)

最近は(GitHubのissueとかで)けっこうMarkdownで文章を書いているので、マークダウン形式Javadocもちょっと書いてみたけど、ほとんど違和感ないですね。素晴らしい。


あと、今回新しくプレビュー版機能に追加されたプリミティブ型のパターンマッチ
他の言語だと普通に出来ていることがJavaでも出来るようになる感じだけど、旧バージョンとの互換性を崩さずswitchとかinstanceofに徐々に機能を追加していって、ようやくJavaでも出来るようになった、というのがいかにもJavaっぽい(笑)


その他のプレビュー版機能はほとんど繰り越しのようだけど、コンストラクターでsuper()呼び出しの前に文を入れられるという機能にちょっと変化があった。
親インスタンスの初期化前に自クラスのフィールドを初期化できるようにするというもので、「マジか?!」って思ったんだけど、さくらばさんはニーズはほとんど無いだろうって書いてましたね(汗)
自分は、親コンストラクターから子クラスでオーバーライドされたメソッドを呼んだけどフィールドが未初期化でnullのままなので「うぅ…」ってなった経験があるので、ニーズが無いことはないと思います、はい^^;(あまりやるべきじゃないんでしょうけどね、ええ、分かっておりますともorz)

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

Java22 無名変数など

2024-03-22 22:14:54 | PG(Java)

2024/3/19にJava22が出たので、例によって調査

今回の目玉は無名変数
tryで「_」が使えるようになったのは嬉しい。

それと、複数ファイルソースコードの実行
単一のソースファイルをjavaコマンドで直接実行することは以前から出来ていたけど、今回、複数のソースファイルを参照してくれるようになった。
(ちなみに単一のソースファイルから直接実行って、Java11からだったんだなぁ。もっと最近かと思ってた^^;)

それと、一部の人にとって待望のForeign Function & Memory APIがついに正式版になったようだ。
自分個人としては使う機会があるかどうか分からないけど^^;


Java22ではプレビュー版の機能がかなり多い。

しかも、今回新しく追加になったプレビュー版機能もなかなか期待大。

  • super()・this()の前に文を書けるようになる
    • ちょくちょくコンストラクターのsuper()の前に計算式を書きたいことがあるので、とても嬉しい。
  • Stream Gatherersクラス
    • Streamの終端処理のcollectメソッドのように、中間処理用のgatherメソッドが新設される。そこに渡すのがGatherersクラスのメソッド。ウィンドウ処理は欲しかった人が居そう。
  • Class-File API
    • JavassistやASM・BCELでclassファイルをいじっていたのを、標準APIで用意するらしい。ちょっと試してみたいが、いまいち使い方が分からないorz

(翌日追記)
Class-File API使ってみた。なかなか楽しいw

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

Java21 getLast(), case null

2023-09-24 20:43:16 | PG(Java)

2023/9/19にJava21が出たので、例によって変更点を調査。
真面目な見どころはきしださんさくらばさんのサイトで見てもらうとして、自分が今回の目玉だと思った機能は。

なんと言っても、Listに getFirst() や getLast() が追加になったことですね!
今まで末尾要素を取得するには、list.get(list.size() - 1) というちょっとくどいコードを書く必要がありましたからね。
先頭要素の取得も、list.get(0) より list.getFirst() の方が意図が分かりやすいし。
LinkedHashSetやLinkedHashMapでも同様に先頭・末尾が取得できるのは便利。

それから、ようやくswitchで case null が書けるようになりましたね!
これ、JDK1.5(Java5)でswitchに列挙型が書けるようになった頃から欲しかった…。

switchでデータ型のマッチングが出来るようになったのも嬉しい。普通の人はあまり使わないかもしれないけど、Embulkプラグインのように色々なデータ型を処理するツールを作るときは、これがあるととても捗る。Java11にあったら使いまくったんだけどなぁ。

ちなみにswitchといえば、レコードのパターンマッチングとかにプレビュー版にはあったけどJava21の正式版には無い機能があってハマったorz
まさかプレビュー版から機能が削られることがあるとは思わなかった…。

あとはプレビュー機能でも文字列テンプレート(文字列補間)とか無名変数とかmainメソッド簡略化とか面白いものが増えてるけど、これらはいずれ正式機能になった時に。

面白いと言えば、Characterクラスに追加になったisEmojiメソッドかな。「emoji」って英語なのか?!^^;

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

Java20 ClassFileFormatVersion

2023-03-22 21:15:07 | PG(Java)

2023/3/21にJava20が出たので、新機能をメモ

きしださんのJava 20新機能まとめによると、今回はJEP429 Scoped Valuesが追加になった程度で、大きな修正は無いらしい。

とはいえ、レコードのパターンマッチングに拡張for文(for each構文)が対応したというは、ちょっと驚いたw

それから、リフレクション関連で地味にAccessFlagという列挙型が追加されていた。
今までpublicやstaticといった修飾子はModifierというクラスの整数値の論理和で表していたけど、それの列挙型版w

さらに驚いたのは、新設されたClassFileFormatVersionという列挙型。
今まで、「Javaのバージョン」と「classファイルのバージョンの数値」を対応付ける方法が分からん…と言っていたんだけど、今さらそれが分かるクラスが追加になるとはw

(追記)
javacの--releaseで7が指定できなくなった(Java7のコンパイルが出来ない)。
それと、8を指定すると警告が出るようになった。いよいよJava8の廃止が見えてきたのか…Asakusa FrameworkはいまだにJava8なんだけどな^^;

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

Java19 レコードパターン 仮想スレッド

2022-09-25 18:06:47 | PG(Java)

2022/9/15にドラクエ10オフラインが発売されて忙しい最中の9/21にJava19が出たわけですよ^^;

一番話題をさらったのはBigDecimalにTWOという定数が加わったことのようですが(爆)

目新しい機能はプレビュー版ばかりですね。

  • switchパターンマッチング…ガードの記号が&&からwhenに変わった
  • レコードパターン…recordのパターンマッチが出来る。意外と高機能w
  • 仮想スレッド…Javaの軽量スレッド。使い方は既存のThreadとほとんど変わらないのがすごい。ExecutorServiceで軽量スレッドを使う方法は分かったけど、ForkJoinで使う方法が分からないorz
    • 地味にExecutorServiceがAutoCloseableを実装して、try文で使えるようになった
  • Structured Concurrency(インキュベーター)…構造化された並列性制御?仮想スレッドと関係あるらしい
  • Foreign Function & Memory API…インキュベーターからプレビューに変わった。なかなか正式にならない^^;

そんじゃパラディンに転職してくる。はぁー忙しい忙しい。

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