Ich versuche sorgfältig und sorgfältig säubern einige meiner älteren (Produktion) Code. Eine Sache, die ich versuche, ist, alle meine Verwendungen von java.util.Date
in LocalDate
und DateTime
umzuwandeln.Konvertieren von java.sql.Date & java.util.Date in org.joda.time.LocalDate
Allerdings bemerkte ich heute Nacht ein großes Hindernis, als ich arbeitete. Ich hatte diesen Code:
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;
}
I umgewandelt last
und next
zu:
LocalDate last = new LocalDate(results.getDate("LAST_DELIVERY_DATE"));
LocalDate next = new LocalDate(results.getDate("NEXT_DELIVERY_DATE"));
und Netbeans betonte die if == null
und sagte:
Unnecessary test for null - the expression is never null
Dies macht Sinn, weil eine neue LocalDate
Instanz wird nicht null sein (nein new Object()
kann sein).
ABER, in diesem Fall und in vielen Fällen in meinem Programm, ein null
Datum kommuniziert einige wesentliche Informationen. In diesem Fall wird angezeigt, ob die Reihenfolge 1) offen ist (oder nicht), 2) empfangen wurde (oder nicht).
Also, versuchen, Wege, um es zu finden, dachte ich, ich stattdessen diesen Code verwenden:
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"));
Aber dies scheint nur hässlich zu mir? Außerdem ruft es zweimal die Funktion "ResultSet # getDate()" auf, die .... korrigiert mich, wenn ich falsch liege ... macht zwei Aufrufe an die Datenbank, richtig ?. So, jetzt meinen Code joda-Zeit zu konvertieren ich im Wesentlichen die Zeit bin Verdoppelung es java.sql.Date
Objekte aus der Datenbank zu erhalten nimmt ...
LocalDate last = LocalDate.fromDateFields(results.getDate("LAST_DELIVERY_DATE"));
LocalDate next = LocalDate.fromDateFields(results.getDate("NEXT_DELIVERY_DATE"));
nicht funktioniert, entweder, weil fromDateFields
ein NullPointerException
wirft, wenn es erhält einen null
Wert.
Also, meine Frage ist: Wie behandeln Sie am besten null Daten, wenn Ihr Programm mit null Daten und Joda-Zeit braucht? Fehle ich etwas? Gibt es einen leichteren Weg, um das zu erreichen, wonach ich suche?
Es ist ein Desktop 'Swing' Anwendung org.joda.time.LocalDate, so dass keine Java ist keine Option. – ryvantage
@ryvantage Scala ist immer noch eine Option, da es auf der JVM läuft und bidirektional mit Java kompatibel ist. – djechlin
Danke für den Vorschlag. – ryvantage