![]() | tech note |
| 自分をリファクタリング中。 |
遅ればせながら、Java5の新機能を学ぶ。
JavaWorld最終号を参考に、1.4から変わった機能を試してみた。
1.4まで不便に感じてたところが便利になってるし、スクリプト言語からの影響も垣間見え、
EoDな方向性が出ていると感じました。
//Java5以前
List list1 = new ArrayList();
Integer count1 = new Integer(256);
list1.add(count1);
System.out.println(((Integer)list1.get(0)).intValue());
//Genericsを使った例
List<Integer> list2 = new ArrayList();
Integer count2 = new Integer(256);
list2.add(count2);
//list2.add("string"); Integer以外をaddしようとするとコンパイルエラー
System.out.println(list2.get(0).intValue()); //キャスト不要!Map<String, List<String>> map = new HashMap();
public List<String> getXX(List<Integer> target) {
....
}//AutoBoxingも使った例
List<Integer> list3 = new ArrayList();
list3.add(256); //intで指定できる
System.out.println(list3.get(0)); //intValue()も不要for (取り出す要素 : 配列やコレクション) {
//処理
}
の形式で書く。
//拡張for文
List<Integer> list4 = new ArrayList();
list4.add(256);
list4.add(256*256);
list4.add(256*256*256);
for (Integer count : list4) {
System.out.println(count);
}
スクリプト言語のようなお手軽さがありますね。
public enum Lang {JAVA, RUBY, PHP};
Lang lang = Lang.valueOf("RUBY");
switch (lang) {
case JAVA:
System.out.println("Struts");
break;
case RUBY:
System.out.println("Rails");
break;
case PHP:
System.out.println("Akelos");
break;
}method(Object... obj){
}
の形式で書く。public static void main(String[] args) {
System.out.println(getArgsLength("a"));
System.out.println(getArgsLength("a", "b"));
System.out.println(getArgsLength("a", "b", "c"));
}
private static int getArgsLength(String... obj) {
return obj.length;
}