理由は、キャストエラー。これをJava1.7 のデフォルトではコンパイルエラーとして表示してくれないため、開発環境ではエラーがでないが、Java1.6 でBuild したらコケる。
以下、テストコード
package test; import java.util.Map; import java.util.HashMap; public class Test { public static void main(String args[]) { Mapresult = new HashMap (); result.put("key",new Integer(2)); int errorCode = (int)result.get( "key" ); System.err.println("errorCode: " + errorCode); } }
で、問題は以下の部分。
int errorCode = (int)result.get( "key" );
以下のようにキャストすべき。
int errorCode = (Integer)result.get( "key" );
-source option に1.6 を指定すると、キャスト失敗。
javac -source 1.6 -bootclasspath "C:\Program Files\Java\jdk1.7.0_67\jre\lib\rt.jar" Test.java Test.java:11: エラー: 変換できない型 int errorCode = (int)result.get( "key" ); ^ 期待値: int 検出値: Object エラー1個
しかし、source を1.7 に指定すれば、コンパイルに問題は起きない。
javac -source 1.7 -bootclasspath "C:\Program Files\Java\jdk1.7.0_67\jre\lib\rt.jar" Test.java
で、開発中にどうやってこれを検知するか(コンパイルエラーとして表示させるか)という点ですが、 Eclipse の以下の設定で、実行環境をJava1.7 から、1.6 に変更すれば検知可能です。
Right click on the project > Build Path > Java Build Path > Libraries