java odkaz na funkciu ako parameer funkcie

Programovacie jazyky, rady, poradňa...
p4to
Expert
Expert
Používateľov profilový obrázok
Príspevky: 156
Registrovaný: 17 jún 2010, 8:07

java odkaz na funkciu ako parameer funkcie

Príspevok od používateľa p4to »

Ahojte,
neviem ci to bude mozne, ale chcel by som sa opytat ci by sa dalo v jave spravit nieco take, ze by som ako parameter funkcie poslal
odkaz na inu funkciu a ta by sa vykonala. uvediem priklad:

Kód: Vybrať všetko

public class Class {
    
    
    
    void function1(){
        
    }
    
    void function2(){
        
    }
    
    void function3(){
        
    }
    
    void fun(int cisloFunkcie){
        switch(cisloFunkcie){
            case 1:
                function1();
                break;
            case 2:
                function2();
                break;
            case 3:
                function3();
                break;                        
        }
    }
}
A tu by som chcel fun nahradit niecim takymto

Kód: Vybrať všetko

fun(function f){
f();
}
kde f by bola bud function1, function2, ...

V novej verzii 8 by sa to mohlo dat nieako ci nie ??

Diki
Spixy
Professional
Professional
Používateľov profilový obrázok
Príspevky: 1334
Registrovaný: 24 okt 2010, 12:52

Re: java odkaz na funkciu ako parameer funkcie

Príspevok od používateľa Spixy »

- pomocou interface: http://stackoverflow.com/a/122414/4175339
- Java 8 síce podporuje Lambdy ale neviem či je to to, čo potrebuješ...

WTF to java nemá pointre na funkcie?
pcsiete
Medium Star
Medium Star
Príspevky: 413
Registrovaný: 07 dec 2012, 18:47

Re: java odkaz na funkciu ako parameer funkcie

Príspevok od používateľa pcsiete »

Spixy napísal: WTF to java nemá pointre na funkcie?
Na co by jej boli? V Jave ako beznom OOP jazyku by ich nikdo nikdy nevyuzil, a ak aj niekto hej, tak nespravne.

Robi sa to cez java.util.Runnable, e. g.

Kód: Vybrať všetko

class Trieda {
    public static void perform(Runnable action) {
        action.run();
    }
}
Samotne Runnable sa da vytvorit ako anonymny objekt (co znie pekne, ale v praxi sa ti tak ci tak vytvori ako osobitna trieda, len ti to setri robotu), alebo pouzit lambda:

Kód: Vybrať všetko

Trieda.perform(() -> System.out.println("Vykonavam..."));
Aj ked lambda moze preberat argumenty, samotny typ Runnable je najprimitivnejsi, a preto na pracu so svojou vlastnou skupinou parametrov by sa ti oplatilo urobit si dcersku triedu.
Napísať odpoveď