ひしだまの変更履歴

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

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との変換メソッドが追加されていた。これは知らなかったので、メモした。

コメント

Java15 シールクラス

2020-11-08 15:11:48 | PG(Java)

Java15のプレビュー版の機能であるsealed classをメモ。

sealed classの訳語は、個人的には「封印クラス」(skrbさん辺りがそういうアイデアを出していたような気がする)を推したいが、
javacのエラーメッセージでは「シール・クラス」になっているので、「シールクラス」にしておいた。

なお、直接的な読み方を片仮名化した「シールドクラス」は、シールドというとshield(盾)を思い浮かべてしまうので、使わない方が良いと思う。

コメント

Java8 レシーバーパラメーター

2020-06-24 18:00:32 | PG(Java)

本日の話題:https://twitter.com/nagise/status/1275684711390679040

メソッドの引数にthisが指定されているけど何?という話。
聞き覚えがあるような無いような気がしたけど、自分のページには記載が無かったのできっと知らなかったのだろう^^;というわけで追加した。→レシーバーパラメーター

ググってみると、megascusさんのブログが引っかかった。さすがやで。
アノテーションを付けるための仕組みらしい。ラムダ式のvarもそのために追加されたんだったなぁ。

いまいちぴんと来ないけど、RIP Tutorialというサイトによると、内部クラスのコンストラクターの(暗黙の)引数である親クラスインスタンスに対しても同様の指定が出来るらしい。
(これと整合性を合わせるために、メソッドの引数でもthisを指定できるようにしたのではないかなーという気がする)
こちらなら、まだアノテーションを付けたい場合がありそうな気がしないでもない。

ちなみにこのサイトの例は間違ってるみたいで、親クラスのthisを指定するコンストラクターは
Inner(Outer Outer.this)
のように親クラス名でthisを修飾しないといけないみたい。

コメント

メソッド参照とジェネリクス

2020-06-10 22:33:15 | PG(Java)

https://twitter.com/RayStark77/status/1270436862142763008
https://twitter.com/mike_neck/status/1270499714111115264

メソッド参照で、そのメソッドの引数違いが定義されている(要するにオーバーロードされている)ときにエラーになるという話があった。
メソッドの引数の個数が違うならちゃんと一意に決まるから大丈夫なはず…と思って試してみたら、Function<String, Integer>のように型引数にクラスが指定されている場合は大丈夫だったけど、<A, B> Function<A, B>のように決まっていない場合は駄目らしい。

どうもメソッド参照の曖昧さ解決の問題というより、ジェネリクスの型推論が上手くいっていない雰囲気だけど。
それとは別に、そもそもFunctionには引数が1つのメソッドしか渡せないんだから、引数が2つの同名メソッドが定義されていても無視してくれていい気がする。

コメント

Javaのソースディレクトリーとパッケージの対応付け

2020-05-29 21:57:06 | PG(Java)

今日、Javaのパッケージに関する話題がTwitter上で出ていた。

Javaのソースファイル(javaファイル)を置くディレクトリー構成とパッケージ構成は一致している必要は無いんだけど、よくその必要があると誤解されている。
Javaのclassファイルのディレクトリー構成とパッケージ構成は一致している必要がある。

と思っていたら、javacの-sourcepathで指定するソースディレクトリーでは、パッケージ構成と一致している必要があるそうだ。(→phenanさんのツイート・backpaper0さんのjavacの-sourcepathを試す
JDK1.5のドキュメントにもそう書いてあった。
これは知らなかった…。

Eclipseとかのツールでソースファイルの場所とパッケージ構成が一致してないとエラーになるのが誤解を招いて良くないと思ってたけど、Eclipseが-sourcepath相当の挙動なのであれば、実は正しいのかもしれない。

コメント