Witam,
Ostatnio spotkałem się z dziwnym zapisem wywoływania metody z metody:
[code]
Jan test = new Jan ();
test.obliczwynik().przenieswynik();
[/code]
Ktoś może kojarzy jak stworzyć środowisko do takiego odwołania?
Witam,
Ostatnio spotkałem się z dziwnym zapisem wywoływania metody z metody:
[code]
Jan test = new Jan ();
test.obliczwynik().przenieswynik();
[/code]
Ktoś może kojarzy jak stworzyć środowisko do takiego odwołania?
Najzwyklejsze wywołanie. Metoda obliczwynik() zwraca obiekt, który ma metodę przenieswynik().
Nic specjalnego nie trzeba tworzyć...
Myślę, że tu chyba chodzi o fluent interface
public class App {
public static void main(String[] args) {
Jan test = new Jan ();
test.obliczwynik().przenieswynik();
// Równie dobrze można to zrobić tak:
// test.obliczwynik();
// test.przenieswynik();
}
}
class Jan {
public Jan obliczwynik() {
System.out.println("Obliczam wynik...");
return this;
}
public Jan przenieswynik() {
System.out.println("Przenoszę wynik...");
return this;
}
}
Btw. Fluent Interfaces are Evil
Chyba, że to nie fluent interface, to wtedy:
public class App {
public static void main(String[] args) {
Jan test = new Jan ();
test.obliczwynik().przenieswynik();
// Równie dobrze można to zrobić tak:
// Przenies przenies = test.obliczwynik();
// przenies.przenieswynik();
}
}
class Jan {
public Przenies obliczwynik() {
System.out.println("Obliczam wynik...");
return new Przenies();
}
}
class Przenies {
public void przenieswynik() {
System.out.println("Przenoszę wynik...");
}
}
Jest pewne ryzyko takiego zapisu, jeśli współpracujesz z geniuszami od return null
. Bo jak masz w jednej linii sporo kropek to potem leci NullPointerException i nie koniecznie wiadomo co się stało.
Takie coś jest m.in. Builder Pattern:
http://www.javaworld.com/article/2074938/core-java/too-many-parameters-in-java-methods-part-3-builder-pattern.html
Mutowalny builder z powyżej to niestety koszmar Javy.
Fajne rzeczy się dzieją jak zrobisz np.:
final BuilderA base = ....
final A a1 = base.withX(7).build();
final A a2 = base.withY(8).build();
Tu jedyne rozwiązanie w Javie to lombok z witherami. Ale chyba lepiej przejść na Kotlina.