しらとりのブログ

社会人ひよこプログラマのtil

Java

匿名クラスをシリアライズするときの奇妙な挙動について

TL;DR 非staticのコンテキストで宣言された匿名クラスはエンクロージングインスタンスへの非transientな参照を持つ 匿名クラスでオブジェクトの初期化 Javaでは匿名クラスと初期化ブロックを組み合わせて以下のような書き方ができます。 User user = new Use…

Javaからexeを起動したらデッドロックしてしまった話

TL;DR 下記の条件をすべて満たすとデッドロックします。 呼び出されるexeが標準出力や標準エラー出力に何か書き込むプログラムを持つ ProcessBuilder.start()やRuntime.exec()の後に何もせずProcess.waitFor()する 解決策はProcessが持つストリームのバッフ…

ややこしい委譲の意味

C#に触れていると委譲の意味で混乱することがあるので整理しておきます。 Javaに真の委譲は無い 一般に委譲といえばこちらのイメージ。 コンポジションと転送の組み合わせで処理を委譲する。 Javaのサンプルコード class Operation { public int sum(int x, …