Metoda z metody

0

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?

0

Najzwyklejsze wywołanie. Metoda obliczwynik() zwraca obiekt, który ma metodę przenieswynik().
Nic specjalnego nie trzeba tworzyć...

0

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...");
    }
}
3

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.

0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1