Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Не КАНУН Онлайн клиент яркий пример высокоэффективного Python в реальном времени?
У меня есть сервер Python (использующий Скрученный ) и некоторые сценарии помощника, работающие под Встроенным XP, и он работал отлично.
Моя команда записала встроенное программное обеспечение, сделанное из C++ и Python. Мы решили записать основные классы и тяжелые вычислительные процедуры в C++. Мы записали логику в Python. Библиотеки повышения как связующее звено. Используя повышение никогда не легко, но результаты превосходно. Быстрый и легкий изменить. Используя Python для представления пользовательской необходимости мы можем удовлетворить необходимость клиентов, в реальном времени, изменяя код с помощью инжекционной техники. Что-то действительно захватывающее! (хорошо, я - фанат ;)
Мы начали моделировать в Python, но мы внезапно поняли, что это было ясно слишком медленно. Таким образом, мы решили структурировать программу в различных вычислительных слоях для достижения требований к скорости. C++ был лучшим решением.
для использования Python и C++ вместе, мы должны были сохранить строгий контроль над вводом.
Действительно, Python часто используется в качестве 'языка поддержки', в то время как необходимо записать некоторые тесты - т.е. Я был вовлечен в проект, которым (базирующийся Python) кодовая база среды тестирования была (?) почти столь же большой как тот из основного продукта. Работы 'агентов' Python над QNX, VxWorks - и большинство проблем, которые мы имеем, должны были портировать правильно поточную обработку и связанные с сетью части нашего кода.
Это могло бы стоить для взгляда проект OpenMoko, большая встроенная разработка в Python сделана там.
Вещи предостеречься: - поддержка дополнительного модуля Python/C могла бы вести себя вполне странно в зависимости от платформы/ОС - большинство встроенных платформ предлагает довольно устаревшие версии Python - наконец Вы узнаете, что существует различие между 'надлежащим' встроенным программным обеспечением, в который каждый числа битов и 'современное' встроенное программное обеспечение, которое выполняется на> центральные процессоры XScale на 412 МГц с большим количеством thatn 128 МБ, и затем Python просто не соответствует аппаратным средствам, для которых требуется быть нацеленными: (
единственная настоящая проблема, которую я имею в повседневной работе, состоит в том, что последняя из статической проверки по сравнению с обычным компилятором может заставить проблемы быть брошенными во время выполнения, например, простая случайная кошка строки и интервала в операторе печати может снизить целое приложение.
Модульные тесты являются Вашей единственной безопасностью против этих вещей.
В моем предыдущем работодателе я хотел провести некоторое время, играя с созданием встроенных систем в tinypy, который является "минималистской реализацией Python в 64k кода". (Но я никогда не добирался до него, и у меня больше нет времени.)
Лично, я работал над частью программного обеспечения, которое работает в устройстве, используемом BusRadio. Это - пример встроенного проекта, основывался Скрученный и Python. Устройство является встроенным процессор XScale, работающий debian-полученный распределение, таким образом, это не могло бы выполнить определенные определения "встроенных", но это является довольно блин маленьким: это вписывается в панель инструментов школьного автобуса.
были некоторые интересные проблемы с использованием Python с крупными библиотеками - интерпретатор может занять долгое время, чтобы запустить и загрузить весь код для Скрученного на действительно медленной микросхеме, и некоторые вещи нуждались в оптимизации особого случая. Однако ни в каком смысле был динамический характер Python проблема. Рассматриваемое программное обеспечение, конечно, не было прекрасно, но по крайней мере когда Скрученное использование, простая программная ошибка "не снизит целое приложение". traceback будет зарегистрирован, и обработка продолжается.
Так, если Вы находитесь во встроенной среде, достаточно неограниченной, что можно использовать Python во-первых, это не отличается, чем разработка "обычных" программ (игры, настольные приложения, веб-приложения). Вам не нужен статический контроль типов там, и Вам не нужен он здесь также.
BTW, посмотрите это сообщение в блоге: " Вывод типа для Python " для интересного обсуждения вывода типа и статического контроля типов, включая ссылки на некоторые сообщения в блоге Guido van Rossum, описывающие добавление дополнительного статического контроля типов к Python.
я соглашаюсь с Bruce Eckel , что каждый - более обеспеченное практикующее "сильное тестирование", чем доверие строгому контролю типов. Я думаю, что это применяется одинаково хорошо к встроенной разработке.
Мы используем Python здесь в университете для встраиваемых приложений на основе аппаратной платформы Gumstix. Хотя более способный, чем традиционные встроенные системы, мы находим соединение миниатюрного форм-фактора, низкого (выход) потребляемая мощность и простота в передаче кода между разработкой на настольных машинах и целевыми аппаратными средствами неоценимый.
Python является также большим языком для обучения студентов, и с Gumstix его великое они могут получить код, работающий над системой низкой мощности, а не головной болью и горем, которое идет с использованием специализированных языков, таких как NesC.
Я работал в компании, которая использовала Python во встроенном продукте, основанном на Atmel AVR32 и работающем со встроенным Linux. Прошивка изначально была разработана на ПК (из-за отсутствия работающего прототипа оборудования), а затем была перенесена на встроенное оборудование, работающее на кросс-скомпилированном интерпретаторе Python.
Возможность отлаживать и изменять исходный код «вживую» на устройство было большим плюсом во время разработки и сэкономило много времени. Большими недостатками были скорость и использование памяти интерпретатором Python.
После первого выпуска производственной прошивки мы перенесли критические участки кода на C / C ++. Работа по переносу была довольно простой и привела к улучшению на несколько порядков критичного к скорости кода (как и следовало ожидать).
Мы используем python в довольно большом количестве встроенных плат с процессорами ARM и 16 МБ ОЗУ (под управлением Linux).
Он работает очень хорошо и действительно легко и быстро создавать собственный код - одна из сильных сторон Python.
Что касается надежности кода, мы стараемся обеспечить 100% тестовое покрытие. Написание тестов с помощью python происходит очень быстро и дает чувство уверенности. Мы используем витую пробную версию для запуска тестов и составления отчетов о покрытии, но есть много других доступных инструментов.
По моему опыту, тесты python + более надежны и намного быстрее пишутся, чем любые другие альтернативы.
Единственным недостатком встроенной работы является то, что иногда python может работать медленно, а иногда использовать много памяти (условно говоря). Это еще не вызывает у нас проблемы с остановкой шоу, а python довольно легко профилировать как по скорости, так и по памяти, если это становится проблемой.
pychecker тоже очень полезен, который улавливает довольно много типичные ошибки.