2024-10-27
入力データにnull値が来る場合の対処のメモ
ユーザ定義Javaクラスから呼び出す外部処理を格納したJarファイル内のクラスのコード。
package towTimesMethods; import java.math.BigDecimal; public class MakeTowTimes { private static BigDecimal ConstTow = new BigDecimal("2.0"); public static long Makelong(long num) { return num * 2; } public static double Makedouble(double num) { return num * 2; } public static Long MakeLong(Long num) { if (num == null) return 0L; return num * 2; } public static Double MakeDouble(Double num) { if (num == null) return 0D; return num * 2; } public static BigDecimal MakeBigDecimal(BigDecimal num) { if (num == null) return BigDecimal.ZERO; return num.multiply(ConstTow); } public static String MakeString(String str) { if (str == null) return ""; return str + str; } }
とりあえずテスト。各メソッドの動作確認できました。
Spoonの該当パスに先のコードで生成したJarファイルをコピーしてからSpoonを起動してユーザ定義Javaクラスを定義します。
2レコード定義してます。
入力項目の内容をJarファイル内のクラスのメソッドで処理するコードを定義します。
Jarファイル内のクラスのメソッドを呼び出せました。
レコードを1つ追加します。
全項目がnullの1レコードが追加されました。
はい、見事異常終了となりました。
long型、double型の処理を除去すると動作します。
以下の2点、項目がnullの時異常終了する模様です。どうもメソッドgetLong(), getDouble()の戻り値がnullになる模様です。
なので Long から long へのキャスト、Double から double へのキャストでエラーになる訳です。※nullで返るとは思わなんだ…
long a11 = get(Fields.In, "long値").getLong(r); double a12 = get(Fields.In, "double値").getDouble(r);