Ich komme aus der PHP-Welt. Können Sie erklären, was Getter und Setter sind, und einige Beispiele nennen?
Ich komme aus der PHP-Welt. Können Sie erklären, was Getter und Setter sind, und einige Beispiele nennen?
Antworten:
Tutorial ist dafür nicht wirklich erforderlich. Informieren Sie sich über die Kapselung
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)
, sollte dies keinen Einfluss auf someObj
den internen Status haben. Auch Setter und Getter (Accessoren und Mutatoren nach ihrem schickeren Namen) haben eine sehr strenge Methodensignatur, was bedeutet, dass Getter keine Parameter hat. Methoden im Allgemeinen sollten sowieso nur eines tun.
this
Schlüsselwort ist optional, es sei denn, es liegt ein Konflikt mit etwas vor, das einen spezifischeren Bereich hat. In dem von Ihnen angegebenen Beispiel verfügt der erstellte Setter über einen einzelnen Parameter, dessen Name mit dem Feldnamen übereinstimmt. Daher this.fieldName = fieldName
wird verwendet, um zu unterscheiden, dass das Feld zugewiesen wird, und nicht, wie der Parameter sich selbst zugewiesen wird, wie fieldName = fieldname
dies erreicht werden würde. Im Getter besteht kein solcher Konflikt.
In Java sind Getter und Setter ganz normale Funktionen. Das einzige, was sie zu Gettern oder Setzern macht, ist die Konvention. Ein Getter für foo heißt getFoo und der Setter heißt setFoo. Im Falle eines Booleschen Werts heißt der Getter isFoo. Sie müssen auch eine spezifische Deklaration haben, wie in diesem Beispiel eines Getters und Setters für 'name' gezeigt:
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;
}
}
Der Grund für die Verwendung von Gettern und Setzern, anstatt Ihre Mitglieder öffentlich zu machen, besteht darin, dass es möglich ist, die Implementierung zu ändern, ohne die Schnittstelle zu ändern. Viele Werkzeuge und Toolkits, die Reflexion zum Untersuchen von Objekten verwenden, akzeptieren nur Objekte mit Getter und Setter. JavaBeans müssen beispielsweise Getter und Setter sowie einige andere Anforderungen haben.
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);
}
}
Wenn Sie das Programm ausführen, startet das Programm im Netz.
setTime()
wird vom Objekt aufgerufen ctime
wird auf den übergebenen Wert gesetztgetTime()
wird vom Objekt c aufgerufentod
und tod
ausgedrucktVielleicht möchten Sie auch lesen: " Warum Getter- und Setter-Methoden böse sind ":
Obwohl Getter / Setter-Methoden in Java üblich sind, sind sie nicht besonders objektorientiert (OO). Tatsächlich können sie die Wartbarkeit Ihres Codes beeinträchtigen. Darüber hinaus ist das Vorhandensein zahlreicher Getter- und Setter-Methoden eine rote Fahne, dass das Programm aus OO-Sicht nicht unbedingt gut gestaltet ist.
Dieser Artikel erklärt, warum Sie keine Getter und Setter verwenden sollten (und wann Sie sie verwenden können), und schlägt eine Entwurfsmethode vor, die Ihnen hilft, aus der Getter / Setter-Mentalität auszubrechen.
Hier ist ein Javascript-Beispiel aus 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)
Ich habe diese VIEL benutzt, weil sie fantastisch sind . Ich würde es verwenden, wenn ich Lust auf meine Codierung + Animation habe. Erstellen Sie beispielsweise einen Setter, der sich mit einem Setter befasst, Number
der diese Nummer auf Ihrer Webseite anzeigt. Wenn der Setter verwendet wird, animiert er die alte Nummer mit einem Tweener zur neuen Nummer . Wenn die Anfangszahl 0 ist und Sie sie auf 10 setzen, werden die Zahlen schnell von 0 auf 10 umgedreht, sagen wir eine halbe Sekunde. Benutzer lieben dieses Zeug und es macht Spaß, es zu erstellen.
Beispiel aus 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;
}
}
?>
Zitate:
Hier ist ein Beispiel, um die einfachste Art der Verwendung von Getter und Setter in Java zu erklären. Man kann dies auf einfachere Weise tun, aber Getter und Setter haben etwas Besonderes, wenn man ein privates Mitglied der Elternklasse in der Kindklasse in der Vererbung verwendet. Sie können dies durch Verwendung von Getter und Setter ermöglichen.
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();
}
}