2015-05-08 13 views
6

Sto leggendo su Java's Play framework ma non ho molta esperienza in Java. Qualcuno può spiegare questoGioca! framework Java Promise example

Promise<Double> promiseOfPIValue = computePIAsynchronously(); 
Promise<Result> promiseOfResult = promiseOfPIValue.map(
    new Function<Double,Result>() { 
    public Result apply(Double pi) { 
     return ok("PI value computed: " + pi); 
    } 
    } 
); 

ottengo che stanno creando una promessa promiseOfPiValue che dovrebbe calcolare un doppio in modo asincrono. Quindi, chiamano map in quell'istanza di promessa a cui stanno passando una nuova istanza di Function come argomento, che ha implementato il metodo apply.

La parte della mappa è dove mi perdo - come funziona il metodo della mappa? Sembra che restituisca una nuova promessa di tipo Result, ma qual è la logica di chiamare il metodo apply all'interno di un'implementazione di Function?

risposta

2

Da documentazione gioco:

Mappe questa promessa a una promessa di tipo B. La funzione function viene applicata non appena la promessa viene riscattata.

La funzione:

new Function<Double,Result>() { 
    public Result apply(Double pi) { 
     return ok("PI value computed: " + pi); 
    } 
} 

convertirà il valore pi di tipo Double a Result usando ok() funzione definita in Controller appena computePIAsynchronously è finito.

ma qual è la logica di chiamare il metodo apply all'interno di un'implementazione di Function?

Questa è la bellezza di Promises e Scala. Il framework di promesse di Scala assicurerà che la funzione venga applicata quando la promessa viene riscattata. Se vuoi leggere questo argomento, ti suggerisco di prendere le fonti e la documentazione di scala.concurrent.ExecutionContext.