Какая польза от геттеров и сеттеров, если вы можете просто сделать свои переменные общедоступными и избежать хлопот с такими строками, как A.setVariableX(A.getVariableY())?
Просто чтобы вы знали, сначала я реализовал в своей программе геттеры и сеттеры, такие же простые (и в то время бесполезные) функции для изменения или извлечения переменных, но они оказались спасателями во время отладки при выдаче исключений. Я не понимаю, как отладка была бы такой простой, если бы они были общедоступными :)
- personwrongusername  schedule16.06.2010
Чтобы скрыть детали реализации. Если вместо этого вы решите сделать свои свойства общедоступными, а затем решите изменить способ их работы, вам придется изменить весь связанный код.
С помощью методов получения и установки вы часто можете изменить детали внутренней реализации без изменения видимого API (и, таким образом, избежать необходимости изменять какой-либо код, который использует API рассматриваемого класса).
Геттеры и сеттеры могут выполнять проверку и ленивое создание экземпляров, тогда как открытые члены - нет.
Кроме того, это не зависит от языка, поскольку большинство языков, реализующих свойства, абстрагируются от реализации, поэтому они выглядят как открытые члены в коде.
personRowland Shawschedule14.06.2010
comment
Странно то, что 99% сеттеров / получателей не предназначены для проверки или ленивой инициализации ... Несмотря на это, Java - это все о них ... посмотрите на компоненты Pojo ... Это правда, что с помощью IDE они этого не делают вообще беспокоит разработчика, но все же ... Это не имеет отношения к Reflection ... Единственное, что имеет отношение к этому, - это проксирование, для которого требуются сеттеры / геттеры
- personlisak; 18.06.2011
Потому что иногда есть некоторые ограничения относительно того, какой может быть ваша переменная, и необходимость проверки этого при установке имеет смысл.
например, если вашему возрасту не разрешено быть -1, вы должны проверить это в своем сеттере.
if(value >= 0)
{
_age = value;
}
else
{
throw new InvalidAgeException("Age may not be less than 0");
}
Сеттеры и геттеры применяются к свойствам, какие бы «свойства» ни были в вашем коде.
Например, у вас может быть переменная angle, в которой хранится значение угла, выраженное в радианах. затем вы можете определить сеттеры и геттеры для этой переменной с любыми угловыми единицами, которые вы считаете подходящими.
Это часть принципа инкапсуляции. Вы используете сеттеры и геттеры в качестве интерфейса для взаимодействия с вашим объектом, чтобы вы могли, например, позже добавить любую функциональность (например, проверку входных данных), не касаясь кода, который использует класс (ы).