Лучшие практики могут меняться со временем.
Я могу подумать в двух случаях использования открытых полей, оба как-то противоречивы.
Адам Бьен говорит в этом посте , что если вы используете DTOВы не можете использовать private + getter + setter, а только открытые поля.Таким образом, вы уверены, что данные транспортируются как есть, без каких-либо изменений.Но в той же строке он добавляет, что это будет стоить вам много собраний, объясняющих, почему вы делаете это таким образом ...
Еще одно использование непостоянных открытых полей - использование открытых полей final (инициализированных в конструкторе) для обеспечениянеизменность.Создание таких классов, как
public Person{
public final String lastName;
public final String firstName;
public Person(String firstName, String lastName){
this.firstName = firstName;
this.lastName = lastName;
}
}
, является своего рода новой лучшей практикой , рекомендованной в таких местах, как codemonkeyism .
Но если вы неабсолютный владелец кода и / или вы можете принудительно выполнять новые стандарты, вам следует избегать использования открытых / защищенных полей ...