Java

シングルトンインスタンスの static 宣言は一番最後に書く

この前、後輩からきかれてちょっとびっくりしたこと。 一見するとただのシングルトンパターンのクラスが、なぜか動かないと言われました。 public class Sample { private static final Sample instance = new Sample(); private static Map<String, String> map = null; pri</string,>…

FileクラスでNullPointerException

JavaのAPIは、基本的にIO関係でエラーが発生した場合、例外を投げるような設計になっています。 たとえば、FileInputStream はコンストラクタに存在しないファイルを指定した場合、FileNotFoundException を投げてきます。 また、各メソッドも何かあれば IOE…

拡張for文と匿名配列

あまり見かけないけど個人的に好んでつかうJavaのイディオムが拡張for文と匿名配列の組み合わせ。 for(String str : new String[]{"aaa", "bbb", "ccc"}){ System.out.println(str); } テストコードとかで、順番に値をチェックしたいときに使っています。 配…

文字列を == で比較してもいい例

昨日、トリムされているかの判定処理を書いていて気付いたのですが…。 Javaでは、文字列比較に == を使ってはいけないのが常識。 でも、以下の場合は == を使ってもOKです。 /** * トリムされている(両端が空白でない)かどうか判定します。 * * @param str …

SPANやDIVでStrutsのerrorStyleClassみたいなことをする方法

Strutsのhtmlタグは、「エラーがあった時のみ適用されるスタイル」というのを指定することができます。 <html:text property="name" styleClass="textbox" errorStyleClass="textbox error" /> これ普通のSPANやDIVでもできないかな・・・と、いろいろ考えてみました。 結局、思いついた一番ベストな方法はこれ。 <span style="textbox<logic:messagesPresent property="name"> error</logic:messagesPresent>" /> 指定したプロパティ…

現在時刻を取得する方法

現在時刻のミリ秒を取得するのに、こういうやり方を何度か見ました・・・。 Date date = new Date(); long now = date.getTime(); Calendar calendar = new GregorianCalendar(); long now = calendar.getTimeInMillis(); 日付の取得なら Date や Calendar …

文字を * に置換する(for文なしで)

他の人のソースを見ていたら、こんなのがありました。 String str = ""; for(int i = 0; i < input.length(); i++){ str += '*'; } 入力された文字を * に置き換える処理です。 でも、よく考えたらこれ、for文いらないですよね・・・。 char[] buf = new cha…

下限値を設定したい

こんなソースがありました。 public class Sample{ private int rate; public Sample(int rate){ this.rate = rate; if(rate < 1000){ this.rate = 1000; } } } rateが1000以下なら1000、そうじゃなければrateで初期化。 そうすることによって、this.rate >=…

配列 vs ArrayList、速くて軽いのはどっち!?

Javaのソースで、たまに「ArrayListを使っているけど、代入する要素数は決まっている」というのを見かけます。 こういうのを見ると、「要素数が決まっているなら、可変のもの(ArrayList)じゃなくて固定のもの(配列)を使った方が速くてメモリ使用量も少なくて…

DBコネクションをクローズするとき、Oracleだとコミットが走る!?

通常、自動コミットがオフの状態であれば、JavaからDBのコネクションをクローズするときにロールバックかそれに相当する処理が行われます。 Javaのドキュメントにも、このことが書かれています。 自動コミットモードが無効にされている場合、変更をコミット…

正しいプログラミングなんてない

仕事で他の人が書いたソースのチェックをしていたんですが、その中にこんなのがありました。 public UserDTO selectUser(UserDTO[] userDTO){ Vector<Object> vector = new Vector<Object>(); for(int i = 0; i < userDTO.length; i++){ if(条件を満たしているか){ vector.ad</object></object>…

チェックした状態を初期値にしてcheckboxやmultiboxを使う方法

Strutsを使っていてよく問題になることとして、やを使う際にチェックした状態をデフォルトにすることができないというのがあります。これは ブラウザはチェックされたものしかリクエストパラメータとして送信しない Strutsはパラメータにない場合はActionFor…

3値理論はデータベースに限った話じゃない

今日、データベースに入れる値がNULLか空文字かでちょっとした論争に。 個人的には「データがないんだから"NULL"」だと思ったんですが、「空文字でいいじゃん」と「決まりはないけど他が空文字だからここも空文字で」という二対一で負けました。 NULL撲滅委…

ExceptionとRuntimeExceptionの違い

ExceptionとRuntimeExceptionの違いはプログラミングの段階で発生が予見されるかされないか、例外処理が必須か必須でにないかの違いというぐらいに考えていました。 でも、最近気づいたんですがこの違いは「準正常系」か「異常系」かという風にとらえるべき…

Switch文の条件式にenumじゃなくてnullを入れてみた

昨日、ふと思ったんですが・・・。 JavaのSwitch文の条件式には数値型だけでなく、列挙型(enum)も使うことができます。 でも、enumはクラスの一種なので列挙型の変数にはnullも入れられます。 そんなnullが入っている列挙型変数を、Switchの条件式に入れたら…

SJC-WC受験

先週の土曜日にSJC-WC(Sun認定Webコンポーネントディベロッパ試験)を受けてきました。 結果は・・・ 得点:57% テストステータス:不合格 落ちました orz 敗因はおそらく、寝坊したことだと思います。 9時5分に家出れば間に合うはずが、9時6分に起きた!!!…

Listから配列への無駄のない変換

今日、ふと思ったこと。 よくJavaでListから配列への変換の方法としてこういうやり方が紹介されています。 list.toArray(new String[0]); 変換の際に型を指定する必要があるから、引数に中身が0個の配列を渡す。 でも、ここで生成しているオブジェクトはすぐ…

Javaの公式APIドキュメントを簡単に検索する方法

JavaのAPIドキュメントを検索しようにも、そのページに検索機能がないし、 かといって普通にググると古いJavaSE 1.4のドキュメントがひっかかたりと何かと不便。 そこで、Firefoxのロケーションバーで「java (調べたいクラス)」って入力すると一発で検索でき…

引数にnullを渡す、つづき

この前の「引数にnullを渡す」で、独自にメソッド作ってやっていたけど、 もっといい例があった。 System.out.println(null); でOK。 結果は、「コンパイルエラー:あいまいです」。 char[]、Object、Stringなのかがあいまい、ということっぽい。Oracle Tech…

TimeUnitが便利

Javaで1時間をミリ秒で指定する場合、 long millis = 1*60*60*1000; と書いていたけど、なんか分かりづらい・・・。 1時間を指定しているはずが、後ろの部分が目立ってよく分からないです。 でも、TimeUnitを使うと、 long millis = TimeUnit.HOURS.toMillis…

VisualBasicは「変数名に日本語が使える」言語。

これは結構有名なのか、ごくたまに日本語を変数名に使ってるのを見たりする。 Sub main() Dim 変数名 As String 変数名 = "日本語も可" MsgBox 変数名 End Sub Javaでも同じことができるけど、こっちは見たことがない。 public class Test { public static v…

引数にnullを渡す

オーバーロードしたメソッドに対して、引数にnullを渡すとどうなるのかやってみた。 class NullTest{ public void method(String s){ System.out.println("String s:" + s); } public void method(Integer s){ System.out.println("Integer i:" + i); } } pu…

String.isEmpty()

JavaのStringクラスにisEmpty()なんてのがあるのを知った。 String.isEmpty() (Java Platform SE 6) public void check(String test){ if(test == null || test.isEmpty()){ throw new IllegalArgumentException(); } System.out.println("Not empty."); } J…