a-1. エラーを引き起こすスクリプト:
java.lang.String.format("%d", [10]); // errorjava.lang.System.out.printf("%d", [10]); // errora-2. エラーメッセージ(抜粋):
org.mozilla.javascript.WrappedException: Wrapped java.util.IllegalFormatConversionException: d != java.lang.Double数値(Number)をパラメータ配列に直接入れた結果、 整数フォーマット(%d)に対してjava.lang.Doubleが渡されてしまったようだ。
対策として、数値をjava.lang.Integer.valueOf()メソッドでjava.lang.Integerに変換してから パラメータ配列に入れることにする。
b-1. 実行するスクリプト(printf-format.js):
var stdout = java.lang.System.out;var n = 10; // Numbertry { stdout.println(java.lang.String.format("%d", [n])); // error} catch (e) { stdout.println(e.message);}try { stdout.printf("%d\n", [n]); // error} catch (e) { stdout.println(e.message);}stdout.println(java.lang.String.format("%d", [java.lang.Integer.valueOf(n)]));stdout.printf("%d\n", [java.lang.Integer.valueOf(n)]);b-2-1. Rhino1.7で実行する:
>java -classpath .;js.jar org.mozilla.javascript.tools.shell.Main -w -debug printf-format.jsjava.util.IllegalFormatConversionException: d != java.lang.Doublejava.util.IllegalFormatConversionException: d != java.lang.Double1010b-2-2. jrunscript(Java1.7)で実行する:
>jrunscript printf-format.jsjava.util.IllegalFormatConversionException: d != java.lang.Doublejava.util.IllegalFormatConversionException: d != java.lang.Double1010
0 件のコメント:
コメントを投稿