2015-06-17 7 views
5

Supponiamo che io abbia unquale implementsjava.util.function.Function. Il Function deve conoscere una data di inizio e una data di fine ma questi saranno costanti per tutta la durata della funzione.Stato in una java.util.function.Function

Sto considerando l'implementazione del Function con i campi private final per le date di inizio e fine, poiché il metodo apply non richiede nuovi valori per ciascuna chiamata. Ritengo che ciò semplificherà la mia implementazione, ma temo che ciò vada contro l'intero paradigma della programmazione funzionale.

è ragionevole ai membri della classe immutabili in un Function quando i valori sono richieste dal metodo apply ma sono costanti per tutta la durata del Function?

+2

Sì, niente di sbagliato in questo. –

risposta

3

Non c'è niente di sbagliato nel vostro approccio.

Ritengo che ciò semplificherà la mia implementazione, ma temo che ciò vada contro l'intero paradigma di programmazione funzionale.

Per risolvere questo problema, è possibile implementare un metodo che ottiene la data di inizio e di fine e restituisce una funzione. Ad esempio:

public static final Function<Object, Object> getDateF(final Date start, final Date end) { 
    return input -> { 
    // do something with start/end for your calculation 
    final Object output = null; 
    return output; 
    }; 
} 

Sostituisci oggetto in base alle esigenze.

+2

Vorrei aggiungere che al runtime valuterà un oggetto che implementa 'Function' che avrà due campi per' start' e 'end', proprio come nel suggerimento di Roberts. Questo in solo più corto e più carino. – Lii

+0

Avere il 'Function' implementato come una classe, come quello descritto nella domanda, lo rende un po 'pericoloso in quello dove viene usata la funzione, è già stato inizializzato e quindi il programmatore non si rende conto che ha dipendenze sui campi diversi da quelli passati in 'apply', a meno che non leggano l'inizializzazione. Questo approccio risolve questo problema. –

Problemi correlati