Lazy Function Definition Java 8-ban

Posted by | | Szoftverfejlesztés | Nincs hozzászólás a(z) Lazy Function Definition Java 8-ban bejegyzéshez

Minap belefutottam egy olyan problémába, ahol is arra volt szükségem, hogy egy metódus első hívásra másképp viselkedjen, mint majd későbbi hívások során fog. A megszokott és kézenfekvő megoldás, hogy legyen egy boolean first osztályváltozónk, amely true értéke esetén végrehajtódnak az első híváskori műveletek, majd false-ra állítva ezt a booleant, végrehajtódnak a későbbi hívásokkori műveletek.

Íme az implementáció:

public class MyClass {
    
    private boolean first = true;

    public void someMethod(Object object) {
        if (first) {
            System.out.println("do stuff when first called");
            first = false;
        } else {
            System.out.println("do stuff after first call");
        }
        System.out.println("other stuff to do");
    }
}

Korábban is előfordult ilyen eset, de nekem ez a megoldás nem tetszik. Támadt egy ötletem: mi volna, ha írnék egy olyan függvényt, amely első futás után “felülírná magát”.

Íme:

import java.util.function.Consumer;

public class MyClass {
    
    private Consumer<Object> method = param -> {
        System.out.println("do stuff when first called");
        method = p -> System.out.println("do stuff after first call");
    };

    public void someMethod(Object object) {
        method.accept(object);
        System.out.println("other stuff to do");
    }
}

No Comments

Leave a comment