Um das möglich zu machen, müssen Sie fließend APIs.
Bedeutung: jede Ihrer Methoden ... muss einige Objekt zurückgeben; wie:
Whatever a() { ... does something ... and
return whatEverInstance;
}
und dann, wenn alle Ihre a() s, und b() Rückkehr etwas können Sie einen solchen Code aufzuschreiben.
Und wenn Sie „Aufenthalt“ in derselben Klasse, und jede Methode ist nur ein
return this;
tun
so halten Sie Methoden auf demselben Objekt aufgerufen; als das ist eine irgendwie akzeptable Praxis.
Für alle anderen Fälle: sollten Sie wirklich vorsichtig sein, das zu tun! Da diese Praxis in diesem Fall bedeutet: Verletzung Law of Demeter.
Der Punkt ist: eine Klasse sollte nur über seine direkten Nachbarn kennen. Sie möchten keinen Code wie
myField.doSomething().inSomeOtherClass().andNow2HopsAway() ...
schreiben, denn das koppelt diesen Code an eine völlig andere Klasse.
Lange Geschichte kurz: bauen Sie nicht fließend APIs nur für den Spaß daran. Überlegen Sie sorgfältig, wo sie sinnvoll sind. und vergiss niemals das Gesetz von Demeter!
BEARBEITEN; nachdem Sie Ihre Fragen und Kommentare eingehender gelesen haben; Ich denke, dass Sie nicht nur verwirrt sich selbst, sondern auch uns:
ab sofort
public RECT getPositionOfClient() { ... returns an instance of RECT }
Und oben, links, ... sind Felder auf RECT.
So erhalten Sie
int whatever = foo.getPositionOfClient().top;
Erledigt. Es ist ein Feld; Sie brauchen nichts anderes als ".top" zu verwenden, wenn Ihre Methode bereits ein RECT!
method1(). Method2() ist gültig, wenn method1 ein Objekt zurückgibt, das method2 aufrufen kann –