Java

モックフレームワークJMockitで実行時にクラスを差し替える

テストをしたいのに連携システムが起動していなくて単体でのテストができませんでした。テストをしにくいという設計上の問題点はおいといて、他システムと連携する部分をモックで差し替えて動かせないものかと、Javaのモックフレームワークを調べると、EasyM…

インスタンス初期化子と2重ブレースによる初期化

開発者のためのプログラミングQ&Aサイト stackoverflow の Hidden Features of Java というエントリに「Double Brace Initialization」という機能が載ってました。知らなかったので調べたことをまとめます。Double Brace Initialization はインスタンス初期…

任意の Kind の Entity を全て削除する

Kind の Entity を削除したい時に、Dashboard からだとチマチマしか削除できないので全件削除する Servlet を書いた。 DataStoreCleaner が DataStore にアクセスして Entity の削除を行うクラス。 DataStoreCleanServlet が Servlet。 TaskQueue を使って E…

定数フィールドへの参照はコンパイル時にバイナリに展開される

最近知ったこと。 いや、『Java魂』(O'REILLY)を読んだから知ってるはずだけど忘れていた事実。 public static final String HOGE = "hoge";のような定数への参照は、コンパイル時にバイナリファイルにインライン展開される。 (HOGE を参照している箇所は…

RSS2.0 の pubDate フォーマットの日付時刻を SimpleDateFormat で解析する。

RSS2.0 の pubDate はこんな感じ。 <pubDate>Tue, 22 Sep 2009 19:24:08 +0900</pubDate> 曜日と月は US ロケールの文字列。 "+0900" は RFC820フォーマットのタイムゾーン解析文字 Z で解析する。 import java.text.DateFormat; import java.text.ParseException; import java.…

標準出力を JTextArea に出力する

System.setOut(PrintStream out) で標準出力の出力先を変更できる。 JTextArea に転送するような PrintStream を作れば、JTextArea がコンソール代わりに。 JTextArea に出力する際は、Swing のイベントディスパッチスレッドにのせる必要がある。 import jav…

親クラスのコンストラクタを呼ぶ前に

super() はコンストラクタの1行目で記述しなければならないが、 親クラスのコンストラクタを呼ぶ際に複雑な処理を行いたい場合は static のヘルパメソッドを使う。 public class Derived extends Thread { public Derived() { super(createString()); // 親…

instanceof の null チェック

instanceof で null が渡された場合は false になることが言語仕様で保証されている。 if (obj instanceof String) { // ここでは obj は null ではない。 }

ジェネリクス(総称型)を使ったメソッド。

ジェネリクス(総称型)を使ったメソッド。リストの最後の要素を返す。 public static E last(List list) { return list.get(list.size() - 1); }戻り値の前の がポイント。