Есть ли какие-либо ошибки в JDK 6, которых не было в более ранних версиях? Мне интересно узнать некоторые неожиданные изменения, например, следующие в методе Timestamp.valueOf().Gotchas in JDK 6
Timestamp.valueOf(), если имеется метка времени, которая содержит дату или месяц с одной цифрой. например. 2009-9-20, 2009-9-3, 2009-12-4 и т. Д., Ведет себя по-разному в JDK 6 - он выдает исключение IllegalArgumentException, говорящее, что временная метка неправильно отформатирована. В то время как JDK 5 (и более ранние версии) работает очень хорошо, предоставляя правильные значения с «0», префиксными для этих чисел с одной цифрой.
JDK 6 просто строже, потому что метод ожидает, что его аргумент будет строкой в формате escape-метки JDBC. Тем не менее, этот ПЕРЕРЫВЫ код, написанный на JDK 5.
код, как:
String s = "2009-9-1 00:00:00";
Timestamp t = Timestamp.valueOf(s);
Однако JDK-прекрасно с часами, минутами, секундами быть однозначными числами. Я выяснил, что не так, посмотрев исходный код класса Timestamp в JDK 6. Я нашел массив intDate [], который инициализирован {4,2,2}, и длина каждого элемента в дате проверяется на это массив.
Теперь, почему часть времени работает нормально, даже если в них есть отдельные цифры? Потому что код, который проверяет длину на эквивалентный массив intTime [], закомментирован в источнике.
Класс Timestamp в JDK 5 не имел ни одной из этих проверок и отлично работает с такими входами.
Я не нахожу таких странностей, упоминаемых где-либо на официальном сайте. Хотя я нашел другого человека, у которого есть same problem. Эта проблема легко поправимо, и я заинтересован в обнаружении других подобных странных изменений, которые произошли в JDK 6.
Что заставляет вас думать, что они есть? – skaffman
Недавно я нашел один из них в методе Timestamp.valueOf(). Я добавлю детали в вопрос. –
Это должно быть CW. – Geo