Java

Last-modified: 2009-02-18 (水) 15:40:03

Eclipse + Subversion

ジェネリックス

型名をクラスやメソッドにつけることで、汎用的なクラスやメソッドを特定の型に対応付ける機能。

今までの問題点

  • コレクションが返すのがObjectインスタンスの場合、ソースコード上ではあらゆる型にキャスト出来ます。開発者はこのObjectインスタンスが、StringなのかIntegerなのかを理解しているかも知りませんが、第3者はわかりません。
    この場合、誤ったキャストでもコンパイルは通ってしまい、実行時に例外が発生することになります。

型の安全性
型はコンパイル時に型検査が行われる。コンパイルに成功したプログラムは、実行時に型に関するエラーが発生しないことを目標としている。

従来のコード

Map map = new TreeMap();
String s = (String)map.get("key1");
Integer i = (Integer)map.get("key1"); //誤ったキャストでもコンパイルが通る

ジェネリックスを使ったコード

Map<String, String> map = new TreeMap<String, String>();
String s = map.get("key"); //キャスト不要。
Integer i = map.get("key"); //コンパイル時にエラー発生

Java5.0のdocを見ると、以下のように定義されている。
インタフェース Map<K,V>
クラス TreeMap<K,V>

プロパティファイルを触ってみよう

メリット:再コンパイルしなくても、値の変更を反映させることが出来る。

  • java.util.Propertiesクラス

サンプルコード1
TestProperty.java

Properties prop = new Properties();
InputStream is = new FileInputStream(new File("test.properties"));
prop.load(is);
prop.getProperty("test1");

test.properties

test1=a
test2=b

メモ

オブジェクトのコピー
http://www.javaroad.jp/java_array2.htm