Я из мира php. Не могли бы вы объяснить, что такое геттеры и сеттеры, и привести несколько примеров?
Я из мира php. Не могли бы вы объяснить, что такое геттеры и сеттеры, и привести несколько примеров?
Ответы:
Учебник для этого не требуется. Прочтите об инкапсуляции
private String myField; //"private" means access to this is restricted
public String getMyField()
{
//include validation, logic, logging or whatever you like here
return this.myField;
}
public void setMyField(String value)
{
//include more logic
this.myField = value;
}
someObj.getTime().setHour(5)
его вызываете, это не должно влиять someObj
на внутреннее состояние. Также сеттеры и геттеры (аксессоры и мутаторы по их более интересному имени) имеют очень строгую сигнатуру метода, что означает, что у геттера нет никаких параметров. В любом случае методы в целом должны делать только одно.
this
ключевое слово необязательно, если нет конфликта с чем-то, имеющим более конкретную область действия. В приведенном вами примере созданный установщик будет иметь один параметр, имя которого совпадает с именем поля, следовательно this.fieldName = fieldName
, он используется, чтобы отличить, что поле назначается, а не параметр, назначаемый самому себе, как это fieldName = fieldname
было бы возможно. В геттере такого конфликта нет.
В Java геттеры и сеттеры - это совершенно обычные функции. Единственное, что делает их геттерами или сеттерами, - это условность. Метод получения для foo называется getFoo, а метод установки - setFoo. В случае логического значения метод получения называется isFoo. У них также должно быть определенное объявление, как показано в этом примере получателя и сеттера для 'name':
class Dummy
{
private String name;
public Dummy() {}
public Dummy(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
Причина использования геттеров и сеттеров вместо того, чтобы делать ваших членов общедоступными, заключается в том, что это позволяет изменять реализацию без изменения интерфейса. Кроме того, многие инструменты и наборы инструментов, которые используют отражение для исследования объектов, принимают только те объекты, у которых есть геттеры и сеттеры. JavaBeans, например, должны иметь геттеры и сеттеры, а также некоторые другие требования.
error: invalid method declaration; return type required
class Clock {
String time;
void setTime (String t) {
time = t;
}
String getTime() {
return time;
}
}
class ClockTestDrive {
public static void main (String [] args) {
Clock c = new Clock;
c.setTime("12345")
String tod = c.getTime();
System.out.println(time: " + tod);
}
}
При запуске программы программа запускается в сети,
setTime()
вызывается объектом ctime
устанавливается значение, переданноеgetTime()
вызывается объектом ctod
и tod
будет распечатанВы также можете прочитать « Почему методы получения и установки - это зло »:
Хотя методы получения и установки являются обычным явлением в Java, они не особо объектно-ориентированы (OO). Фактически, они могут повредить ремонтопригодность вашего кода. Более того, наличие множества методов получения и установки - это красный флаг, что программа не обязательно хорошо спроектирована с точки зрения объектно-ориентированного программирования.
В этой статье объясняется, почему вам не следует использовать геттеры и сеттеры (и когда их можно использовать), и предлагается методология проектирования, которая поможет вам выйти из менталитета геттеров / сеттеров.
Вот пример javascript от Mozilla:
var o = { a:0 } // `o` is now a basic object
Object.defineProperty(o, "b", {
get: function () {
return this.a + 1;
}
});
console.log(o.b) // Runs the getter, which yields a + 1 (which is 1)
Я использовал их МНОГО, потому что они классные . Я бы использовал его, когда начинал работать с кодированием + анимацией. Например, создайте сеттер, Number
который будет отображать этот номер на вашей веб-странице. Когда используется сеттер, он анимирует старое число в новое число с помощью твинера . Если исходное число равно 0, и вы установите его на 10, вы увидите, как числа быстро меняются от 0 до 10, скажем, за полсекунды. Пользователи любят эти вещи, и их интересно создавать.
Пример от соф
<?php
class MyClass {
private $firstField;
private $secondField;
public function __get($property) {
if (property_exists($this, $property)) {
return $this->$property;
}
}
public function __set($property, $value) {
if (property_exists($this, $property)) {
$this->$property = $value;
}
return $this;
}
}
?>
цитаты:
Вот пример, объясняющий самый простой способ использования методов получения и установки в java. Можно сделать это более простым способом, но у геттера и сеттера есть что-то особенное, что происходит при использовании закрытого члена родительского класса в дочернем классе в наследовании. Вы можете сделать это возможным, используя геттер и сеттер.
package stackoverflow;
public class StackoverFlow
{
private int x;
public int getX()
{
return x;
}
public int setX(int x)
{
return this.x = x;
}
public void showX()
{
System.out.println("value of x "+x);
}
public static void main(String[] args) {
StackoverFlow sto = new StackoverFlow();
sto.setX(10);
sto.getX();
sto.showX();
}
}