Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Термин "со строгим контролем типов" имеет не согласованный определение.
Это приводит "большой" аргумент в flamewar, потому что каждый раз, когда кто-то доказан неправым, они могут просто переопределить его для значения независимо от того, что они хотят, чтобы это означало. Кроме этого, термин не служит никакой реальной цели.
Лучше просто не использовать термин, или, если Вы используете его, строго определяете его сначала. Если Вы видите, что кто-то еще использует его, просит, чтобы он определил термин.
у Всех есть их собственное определение. Некоторые, что я видел:
В Теории типов, там существует понятие одной системы типов, являющейся более сильный , чем другой. В частности, если там существует выражение e1
, таким образом, что оно принято системой типов T1
, но отклонено системой типов T2
, затем T2
, как говорят, более сильны , чем T1
. Существует две важных вещи отметить здесь:
Я слышал, что кто-то сказал в интервью (я думаю, что это был Anders Hejlsberg C# и турбо известность Паскаля), что строгий контроль типов не что-то, что это идет или прочь, некоторые языки имеют более сильную систему типов, чем другие.
существует также много беспорядка между сильно, слабо, статический контроль типов и динамический контроль типов, где статически типизированные языки присваивают типы переменным, и динамические языки дают типы объектам, хранившим в переменных.
Попытка Википедия для большего количества информации, но не ожидают окончательный ответ: http://en.wikipedia.org/wiki/Strongly_typed_language
Люди путают со статическим контролем типов с со строгим контролем типов. Со статическим контролем типов означает, что "Строка является строкой, строка". Со строгим контролем типов означает, "После того как Вы делаете это строкой, ее будут рассматривать как строку, пока она не будет повторно назначена чем-то другим".
редактирование: Я вижу, что кто-то еще действительно указывал на это, в конце концов, :)
Со строгим контролем типов означает, что Вы объявляете свои переменные определенного типа, и Ваш компилятор бросит соответствие hissy, при попытке преобразовать ту переменную в другой тип, не бросая его.
Пример (в Java, обратите внимание):
int i = 4;
char s = i; // Type mismatch: cannot convert from int to char
По словам до н.э. Pierce, парня, который записал "Типы и Языки программирования и Усовершенствованные Типы и Языки программирования":
я провел несколько недель, пытаясь разобраться в терминологии "со строгим контролем типов", "со статическим контролем типов", "безопасных", и т.д., и нашел его удивительно трудным... Использование этих условий является столь различным, что представляет их почти бесполезный.
Таким образом неудивительный, почему Ваши коллеги не соглашаются.
я пошел бы с самым простым ответом: если можно связать строку и интервал без кастинга, то это не со строгим контролем типов.
РЕДАКТИРОВАНИЕ: как указано в комментариях, Java просто делает это :-(
Ключ должен помнить, что существует различие между со статическим контролем типов и со строгим контролем типов. Язык со строгим контролем типов просто означает, что когда-то присвоенный, данная переменная будет всегда вести себя как определенный тип, пока это не будет повторно присвоено. По определению статически типизированные языки как Java и C# со строгим контролем типов, но так являются многими популярными динамическими языками как Ruby и Python.
Так на языке со строгим контролем типов
x = "5"
x всегда будет строкой и никогда не будет целым числом.
На определенных языках со слабым контролем типов Вы могли сделать что-то как
x = "5"
y = x + 3
// y is now 8
Термин «строго типизированный» совершенно бессмысленен. Это не имеет значения и никогда не имело. Даже если некоторые из заявленных определений были точными, я не вижу смысла в причинах различий; Почему важно знать, обсуждать или обсуждать, является ли язык строго типизированным (что бы это ни значило) или нет?
Это очень похоже на термины «Web 2.0» или «OEM», которые также не имеют реального значения.
Что интересно, так это то, как эти фразы начинаются и укореняются в повседневном общении.