Jestem ze świata PHP. Czy mógłbyś wyjaśnić, czym są metody pobierające i ustawiające, i podać kilka przykładów?
Jestem ze świata PHP. Czy mógłbyś wyjaśnić, czym są metody pobierające i ustawiające, i podać kilka przykładów?
Odpowiedzi:
Tutorial nie jest do tego naprawdę wymagany. Przeczytaj o hermetyzacji
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)
nie powinno to wpływać na someObj
stan wewnętrzny. Również metody ustawiające i pobierające (akcesory i mutatory według ich bardziej wyszukanej nazwy) mają bardzo ścisłą sygnaturę metody, co oznacza, że getter nie ma żadnych parametrów. Generalnie metody i tak powinny robić tylko jedną rzecz.
this
słowo kluczowe jest opcjonalne, chyba że występuje konflikt z czymś, co ma bardziej szczegółowy zakres. W podanym przykładzie utworzony ustawiacz będzie miał jeden parametr, którego nazwa jest zgodna z nazwą pola, dlatego this.fieldName = fieldName
jest używany do rozróżnienia, do którego przypisywane jest pole, a nie parametr jest przypisywany do siebie, jak fieldName = fieldname
by się to stało. W getterze nie ma takiego konfliktu.
W Javie metody pobierające i ustawiające to zupełnie zwyczajne funkcje. Jedyną rzeczą, która czyni je getterami lub seterami, jest konwencja. Metoda pobierająca foo nazywa się getFoo, a metoda ustawiająca to setFoo. W przypadku wartości logicznej metoda pobierająca nazywa się isFoo. Muszą również mieć określoną deklarację, jak pokazano w tym przykładzie metody pobierającej i ustawiającej dla „nazwy”:
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;
}
}
Powodem używania metod pobierających i ustawiających zamiast upubliczniania członków jest możliwość zmiany implementacji bez zmiany interfejsu. Ponadto wiele narzędzi i zestawów narzędzi wykorzystujących odbicie do badania obiektów akceptuje tylko obiekty, które mają metody pobierające i ustawiające. Na przykład komponenty JavaBeans muszą mieć metody pobierające i ustawiające, a także inne wymagania.
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);
}
}
Po uruchomieniu programu program uruchamia się z sieci,
setTime()
jest wywoływana przez obiekt ctime
jest ustawiana na wartość przekazanągetTime()
jest wywoływana przez obiekt ctod
i tod
zostanie wydrukowaneMożesz także przeczytać „ Dlaczego metody pobierające i ustawiające są złe ”:
Chociaż metody pobierające / ustawiające są powszechne w Javie, nie są one szczególnie zorientowane obiektowo (OO). W rzeczywistości mogą uszkodzić łatwość utrzymania kodu. Co więcej, obecność wielu metod pobierających i ustawiających jest sygnałem ostrzegawczym, że program niekoniecznie jest dobrze zaprojektowany z punktu widzenia obiektowego.
Ten artykuł wyjaśnia, dlaczego nie powinieneś używać metod pobierających i ustawiających (i kiedy możesz ich używać) oraz sugeruje metodologię projektowania, która pomoże Ci wyrwać się z mentalności pobierającej / ustawiającej.
Oto przykład javascript z Mozilli:
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)
Używałem ich DUŻO, ponieważ są niesamowite . Użyłbym tego, gdy polubiłem moje kodowanie + animację. Na przykład stwórz setera, który zajmuje się tym, Number
który wyświetla ten numer na twojej stronie internetowej. Kiedy setter jest używany, animuje starą liczbę do nowej liczby za pomocą tweenera . Jeśli początkowa liczba to 0 i ustawisz ją na 10, zobaczysz, że liczby szybko zmieniają się od 0 do 10 przez, powiedzmy, pół sekundy. Użytkownicy uwielbiają te rzeczy i fajnie jest tworzyć.
Przykład z sof
<?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;
}
}
?>
cytaty:
Oto przykład wyjaśniający najprostszy sposób używania gettera i settera w java. Można to zrobić w prostszy sposób, ale metody getter i setter mają coś szczególnego, kiedy w dziedziczeniu używa się prywatnego członka klasy nadrzędnej w klasie potomnej. Możesz to umożliwić, używając getter i setter.
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();
}
}