理系学生日記

おまえはいつまで学生気分なのか

java

Re: タグ名が可変の XML 文書を JAXB で構築する

JAXB ナメてました。 このあいだ タグ名が可変の XML 文書を JAXB で構築する - 理系学生日記 という記事をかきましたが、DOM 操作なんか必要なかった。もっとシンプルにかける。 package kiririmode.test.jaxb.main; import javax.xml.bind.JAXBContext; im…

タグ名が可変の XML 文書を JAXB で構築する

タイトルから既に異常な感じがしますが、要するに以下のような XML 文書を作りたいというときにどうすれば良いのかという話です。 <whole> <aaa>value aaa</aaa> <bbb>value bbb</bbb> <part01> <part_a>part value A1</part_a> <part_b>part value B1</part_b></part01></whole>

split にハマる

Java で CSV ファイルをカンマで区切る処理を、RFC4180 をムシして簡単に書こうとすると*1、String#split を使うことが多いかと思います。 しかし、String#split には以下のような罠が存在します。 public class SplitTest { public static void main(String…

こんなプログラムはいやだ

今日のこんなプログラムはいやだ。 メソッドの戻り値が Map ばかり エラーが発生しても、そのエラー情報を Map に入れて呼び出し元に返却する 例外が発生すると即座にキャッチして Map を返す 深いメソッド呼び出しの中でエラーが発生すると、エラー情報が入…

スレッド間うんたらでぼくが不幸になる

10,000 とか 100,000 件/分 を捌くようなオンラインシステムにおいては、待ち行列を作る部分がボトルネックになりがちです。 特に外部サービスと連携するような部分においては、そのネットワーク的な遅延や外部サービス側のレスポンス遅延が大きな影響を与え…

オートボクシングの罠

とある Google Group で話題に上がっており、ぼく自身これに起因するバグを見たことがあるので紹介します。このプログラムの出力は予想できるでしょうか。 public class TestInteger { public static void main(String[] args) { Integer a127, b127, a128, …

日本語文字化け

業務上、割と片手間でつくったスタブモジュールがあったのですが、それを使った人から「設定ファイルに日本語を設定したらその日本語が化けるんですけどなんでですかね*1。ところであなたはなんなんですかね。」みたいな問い合わせがきたりしました。 実は設…

SJC-WC

というわけで晴れて Oracle 認定 Web コンポーネントディベロッパ EE5 を名乗れることになりました。もちろん名乗る機会など毛頭ございませんし給料も一円たりとも上がりません本当にありがとうございました。 SJC-WC の S は Sun だと思うんですけど、もう…

synchronized は相互排他のためだけにあるわけではない件

起動しているスレッドを別スレッドから停止させようとするとき、次のような形のコードを時々見る。 import java.util.concurrent.TimeUnit; public class StopThread { private static boolean stopRequested; public static void main(String[] args) throw…

ローカル AP サーバへの JNDI lookup と RMI 用の JNDI lookup をまぜたときにうまく動かないんだけどこれなんなんだろ

前提として、RMI 呼び出しの際に用いる InitialContext は引数なしのコンストラクタによって構築されており、その構築部分は触わることができない。また、jndi.properties に記述されている JNDI プロパイダの情報はすべて正しく、RMI を提供するリモートサ…

Commons Collections で FizzBuzz

Java SE では、機能ロジックをカプセル化した関数オブジェクトとして例えば Comparator や Iterator が定義されていますが、Apache Commons collections には、for 文や while 文、if 文をカプセル化した Functor が用意されています。なるほど、これを使え…

SimpleDateFormat がスレッドセーフでない件

Java 1.3 の頃は、スレッドセーフでないことが明示されていなかったのではないか。 日付フォーマットは同期化されません。スレッドごとに別のフォーマットインスタンスを作成することをお勧めします。複数のスレッドがフォーマットに同時にアクセスする場合…

特定の例外が発生することを確認するユニットテスト

Perl でいう dies_ok (See: Test::Exception - Test exception based code - metacpan.org)的なユニットテストだが、JUnit 4 を使ってるんだったら @Test アノテーションでできる。 http://kentbeck.github.com/junit/javadoc/latest/org/junit/Test.html @T…

並行

ISBN:4-7973-3720-6:detail ロックと可視性 ロックの機能は相互排他のためだけではない。読む側のスレッドが書く側のスレッドが書いた値を正しく読める保証は無い。可視性を複数のメソッドに渡って保証するためには、必ず同期化を行う必要がある。また、コン…

Effective Java

ようやく Effective Java を読み終えました。内容については、Effective Perl や Effective C++ を読んだ方は、その Java 版だよといえば分かりやすいかと思います。Effective Java 第2版 (The Java Series)作者:Joshua BlochピアソンエデュケーションAmazon…

コメント入れただけでクラスファイルは変化し得る

よくわかんないんだけど、コメント入れただけで Java のクラスファイルが変化するケースに遭遇したりしました。 例えば、こういう意味のないクラスを作ってコンパイルします。このとき生成されるクラスファイルの MD5 値を取っておきます。 public class Dum…

やばい状態にある

業務知識をもっとしっかりつけないといけないし、そろそろ JavaEE をなんとかしないとヤバい状況に陥るかんじになってきているのがたいへんにおそろしい。死期が近づいてる!!!!!!

Eclipse 3.4 徹底攻略

業務システムなんて初めてだし、そもそも Java を扱うのも大学以来だったりしたのですが、4 月からそういう感じで業務に携わることになり、Emacs だけでは不自由することも多くなったりしたので、Eclipse などを触るようになりました。しかし Eclipse は高機…

static にまつわる実行順

static というとクラス変数、クラス関数につける修飾子というイメージがありますが、Java には static initializer と呼ばれるブロックを static キーワードで記述ができます。 下のはクソ簡単な例ですけど、Map にエラーコードとメッセージのマッピングを入…

? extends E と ? super E は結局見方の違いだった

先日ぼくはジェネリクスとかわかるしみたいなことを書いたけど、もちろんこんなのはデタラメだし、わかってるわけがありません。ぼくがこんな風に簡単にウソをつくことに対して、烈火のごとく怒りだしたりする人もいらっしゃるとおもいますけど、まず怒る前…

あー

そういや全然講義の内容と関係ないけど、ボクシング変換って int Integer とかのリテラルとそれに対応するラッパクラス間のみで働くものかと思ってたら、リテラル Object 間でもちゃんと変換してくれるんだとか思った。5.0 からなんですかね。1.4 だとこんな…

Java 研修に来てオブジェクト指向からやりなおしてる

今週はなんか業務とか中断して Java の研修を受けることになりました。なりましたっていうと、なんだか突然決まってぼくが急遽研修に参加することになったような言い回しですけど、そう思ったお前とかは社会をなめてる!!!! ぼくが研修に行くってのは 2 週間…

RMI を試す!

Java にはリモートにあるオブジェクトのメソッドを,ローカルにあるように呼び出せる RMI という仕組みがあります.あるんだったら試さないといけないし,そうしないと死ぬ.実験するために,リモートにあるサーバで足し算をするようなもんを作ります. RMI …

フィールドの隠蔽

プログラミング言語 Java より. public class SuperShow { public String str = "SuperStr"; public void show() { System.out.println("Super.show: " + str); } } public class ExtendShow extends SuperShow { public String str = "ExtendShow"; public…

Mac における Java 開発の問題点

Carbon Emacs と Eclipse のアイコンが似ていて,Command + Tab を押したときに分かりにくい.

Java を勉強せねばならない

アプリ開発を希望していたら,どうも Java っぽいところに行く予感なので,なんとかせねばなりません.Java は大学で触って以来だったりします.当時は 1.4 が出たばかりで,ぼくは何か家計簿みたいなソフトを作り,ムダに 1.4 で導入された正規表現ライブラ…

JIT コンパイルを理解する

前からちょっと気になっていたんですけど,イマイチ理解不足でしたから,この際にちょっといろんなところを眺めてみようと思いたったのです.以下がその眺めた結果として得たものなんですけど,こんなのは wikipedia とかを数十分眺めただけですから,往々に…