При кастинге fred к булевской переменной он скомпилирует:
if (( bool )fred )
(...)
я думаю это, когда Вы сравниваете bool? к bool компилятор делает бросок implicite, сделайте сравнение и затем возвратите TRUE или FALSE. Результат: выражение оценивает к bool.
, Когда Вы не сравниваете bool? к чему-то выражение оценивает к bool?, кто недопустим там.
Думаю, вы ответили на свой вопрос. По словам Джошуа Блоха, «практическое правило простое: сделайте каждый класс или член как можно более недоступным». Эффективная Java
Область видимости Java немного отличается от области видимости C # .
Об этом кратко говорится в C # С точки зрения разработчика Java То же самое, но другое: Модификаторы доступа . Этот документ немного устарел, но по-прежнему актуален.
В этом списке есть две ошибки:
internal
эквивалентен области видимости Java по умолчанию (которая является ее собственной областью). internal protected
эквивалентно Java protected
. Кроме того, в приведенном выше документе не упоминаются модификаторы доступа по умолчанию для классов, только для методов и свойств / переменных.
Для справки: область видимости по умолчанию для классов в C # является внутренней. Java - это обычная область действия по умолчанию, как описано ранее.
Единственное, что я делаю общедоступным, - это статические / конечные переменные, которые обычно являются константами. Все остальное является частным, и доступ осуществляется через методы getXXX () и setXXX (), когда это необходимо. Методы setXXX () также выполняют любую проверку данных. Если мне нужно сделать что-то защищенным, я это сделаю, но обычно я этого избегаю.
Меньше «клиент» (другой код) знает о внутреннем работы ваших классов, он принесет больше пользы ... Простое правило абстракции и фундаментальный столп ООП. Правильный ответ уже дан выше:
«Практическое правило простое: сделайте каждый класс или член как можно более недоступным». ~ Джошуа Блох