Oct 29, 2010 12:47
Поразительно, какие только ошибки и проблемы можно найти на свою голову, если не следовать Пути!
Недавно я ещё раз в этом убедился.
Есть у меня, о, счастливые други, пара подопечных, что ходят ко мне раза два в неделю, пытаясь поразить своим познанием UML и проектирования, и логикой, и умением красиво сплетать Java-код, и научиться от меня, как следует мыслить и как следует быть программистам. Пришли они как-то раз опечаленные и не было на них лица, а одежды их были грязны, как у людей, пребывающих в великой скорби. И я встал, и взял их за руки и ввёл к себе в кабинет, и усадил на мягкие кресла и всячески утешал их. Но ничто не могло развеселить их. Сказал я тогда им: "О, прошу вас, возлюбленные мои ученики, откройте мне, что так печалит вас?". И отвечали они: "Ах, учитель! Есть у нас в нашей премудрой программе класс, а в классе том определен массив строк. Строки те мы выводим для пользователя, чтобы знал он, что происходит внутри вычислительной машины. Семь строк определили мы, но сколь не ухищрялись, нет нам доступа к седьмой! Весьма ругается JVM на любые наши попытки получить больше, чем шесть строк."
Открыл я их код и увидел всё так, как они сказали. Но посмотрел я внимательнее - и, о, что я вижу? - определён тот массив как public String[], и инициализирован он по умолчанию. Сердито посмотрел я тогда на своих учеников и такой вопрос задал им: "Ответьте мне, что заставило вас динамически определять массив, которому не предстоят изменения? Разве праведно вводить в заблуждение Виртуальную Машину и Всевышнего, и копировать ваш массив из объекта в объект, и возможность изменения оставлять ему?" И пали ученики на свои лица и выразили раскаяние. А я взял калам и начертал после слова public слово static. И, умудрён Всевышним, final прибавил следом.
Взяли же тогда ученики код, и откомпилировали его, и преискусно уложили в jar-файлы премудрой ant-программой. И запустили они свою программу, и произнесли заклинания, понятные и непонятные. И упала программа, как Шайтан, возомнивший себя равным Всевышнему. Взглянул я на стек-трейс тогда, и увидел там ошибки сериализации. "Внемлите - сказал я подопечным, - ибо объект ваш сериализованный шесть строк имел в своём массиве, и шесть строк этих десериализованных возвращались к вам каждый раз. Теперь же, когда изменили мы сигнатуру класса, перестали совпадать идентификаторы версий класса, и не десериализуется он больше". И ещё прибавил им:
Если бы сразу вы шли по Пути,
Сразу бы static массив ваш был,
Никак бы вы в беды уже не попали:
Корректный класс корректно читается.
И целовали мне ученики руки, и благодарили, и радостен был вид их, и с миром они отошли к себе.
Но и это не так удивительно, как повесть о cинхронизации и ещё двух моих студентах.
лытдыбр,
профессиональное