javaのソースをコンパイルしていたら
注: hoge.java の操作は、未チェックまたは安全ではありません。
注: 詳細については、-Xlint:unchecked オプションを指定して再コンパイルしてください。
とか言われてしまった。
ああ、なんでver5でこんなに変更したんだろうとぼやきながら調べる。
(1.4も何が変わったのか把握してなかったりするんだけど)
テストプログラムを作成
j2se5_test1.java
---------------------------------
import java.util.*;
public class j2se5_test1
{
     private static Set testSet = new HashSet();
     public static void main(String arg[]){
         testSet.add("sample1");
         testSet.add("this is test.");
         testSet.add("damn tiger");
         int i = 1;
         Iterator iterator = testSet.iterator();
         while(iterator.hasNext()){
             System.out.println(iterator.next());
         }
     }
}
Setが扱うオブジェクトの型を宣言時に明示しないといけないらしい。
従来はキャストで解決していたのをコレクションの宣言で型指定することで、実行時に型が違うって怒られるのをコンパイル時に検出しようってのが目的のようだ。
j2se5_test2.java
---------------------------------
private static Set testSet = new HashSet();
private static Set<String> testSet = new HashSet<String>();
ついでにprintfを使ってみる。
System.out.println(iterator.next());
System.out.printf("%d : \"%s\"\n", i++, iterator.next());
これで文句言われなくなった。
javac j2se5_test2.java
バージョンを古いのにver1.4指定してコンパイルすると元のソースでも文句言われない。
javac -source 1.4 j2se5_test1.java
しかし、新しいのをver1.4指定してコンパイルすると・・・・
javac -source 1.4 j2se5_test2.java
あたりまえだけど、<String>とprintfに対して文句言われる。
どこかの日記帳には-source 1.5指定しない限り、古いのでコンパイルされるって書いてあったけど、最近のだとデフォルトで1.5指定されている様子。
1.4以前に書かれたソースをコンパイルするたびに文句言われるのか・・・・・・。
最近のコメント