理由は、キャストエラー。これをJava1.7 のデフォルトではコンパイルエラーとして表示してくれないため、開発環境ではエラーがでないが、Java1.6 でBuild したらコケる。
以下、テストコード
package test;
import java.util.Map;
import java.util.HashMap;
public class Test {
public static void main(String args[]) {
Map result = 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
0 件のコメント:
コメントを投稿