私は古い(製品)コードのいくつかを注意深く細心の注意を払ってクリーンアップしようとしています。私がやろうとしています一つのことは、すべての私の用途に変換されjava.util.Date
にLocalDate
とをDateTime
。
しかし、私が働いていた今夜、大きな障害に気づきました。私はこのコードを持っていました:
ResultSet results = stmt.executeQuery();
Date last = results.getDate("LAST_DELIVERY_DATE");
Date next = results.getDate("NEXT_DELIVERY_DATE");
boolean received;
if (last == null && next == null) {
received = true; // order is not open
} else if (last == null) {
received = false;
} else {
received = true;
}
私は変換last
しnext
ました:
LocalDate last = new LocalDate(results.getDate("LAST_DELIVERY_DATE"));
LocalDate next = new LocalDate(results.getDate("NEXT_DELIVERY_DATE"));
とNetbeansは下線を引いてif == null
言った:
Unnecessary test for null - the expression is never null
これは理にかなっていLocalDate
ます。新しいインスタンスはnullにならないからです(nullにnew Object()
することはできません)。
しかし、この場合、そして多くの場合私のプログラム全体で、null
日付はいくつかの重要な情報を伝えます。この場合、注文が1)開いているか(またはされていないか)、2)注文が受信されたか(またはされていないか)を示します。
だから、それを回避する方法を見つけるために、私は代わりにこのコードを使用できると考えました:
LocalDate last = results.getDate("LAST_DELIVERY_DATE") == null? null : new LocalDate(results.getDate("LAST_DELIVERY_DATE"));
LocalDate next = results.getDate("NEXT_DELIVERY_DATE") == null? null : new LocalDate(results.getDate("NEXT_DELIVERY_DATE"));
しかし、これは私にとって醜いようです。さらに、「ResultSet#getDate()」関数を2回呼び出します。これは、間違っている場合は私を修正します...データベースを2回呼び出しますよね?したがって、コードをjoda-timeに変換するためにjava.sql.Date
、データベースからオブジェクトを取得するのにかかる時間を本質的に2倍にしています...
LocalDate last = LocalDate.fromDateFields(results.getDate("LAST_DELIVERY_DATE"));
LocalDate next = LocalDate.fromDateFields(results.getDate("NEXT_DELIVERY_DATE"));
値を取得するとをfromDateFields
スローするため、どちらも機能しません。NullPointerException
null
したがって、私の質問は、プログラムで nullの日付とjoda-timeが必要な場合に、nullの日付をどのように最も適切に処理するかです。何か不足していますか?私が求めていることを達成する簡単な方法はありますか?
データベースに2回アクセスするため、3項演算子を使用するコードを簡潔にすることはできません。次のdateutil
ようなメソッドでライブラリを作成することを検討してください:
LocalDate convertToLocalDate(Date date) {
if(date == null) return null;
return new LocalDate(date);
}
IMOがこのコードをクリーンアップして、頻繁に使用される軽量の静的メソッドを犠牲にすることは、良い取引です。
また、Javaを使用しないことも検討してください。||
たとえば、JavaScriptを使用するだけで、この問題は発生しません。ScalaはNullable
型をより明示的にサポートすることでこれを解決する優れた言語であるとも聞いています。古いコードをクリーンアップしている限り、正しく実行することもできます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加