2015-06-09 15 views
19

Ho appena notato che JDK8 introdotto questo metodo per Integer classe:Perché Java 8 introdurre * Integer.sum (int a, int b) *

/** 
* Adds two integers together as per the + operator. 
* 
* @param a the first operand 
* @param b the second operand 
* @return the sum of {@code a} and {@code b} 
* @see java.util.function.BinaryOperator 
* @since 1.8 
*/ 
public static int sum(int a, int b) { 
    return a + b; 
} 

Qual è il punto di questo metodo? Perché dovrei chiamare questo metodo invece di utilizzare l'operatore +? L'unica possibilità che posso pensare è che, per esempio, quando si mescolano le stringhe e interi il significato + operatore cambia, così

System.out.println("1"+2+3); // prints 123 
System.out.println("1"+Integer.sum(2,3)); // prints 15 

ma utilizzando parentesi avrebbe funzionato comunque

System.out.println("1"+(2+3)); // prints 15 

risposta

32

Può essere utile come un riferimento al metodo (Integer::sum) passato a un metodo che richiede un'interfaccia funzionale pertinente (IntBinaryOperator).

Ad esempio:

int sum = IntStream.range(1,500).reduce(0,Integer::sum); 

Naturalmente, questo esempio può utilizzare .sum() invece di ridurre. Ho appena notato che Javadoc per IntStream.sum menziona questa riduzione esatta come equivalente a sum().

+0

Uhm ... probabilmente è qualcosa che devo ancora studiare. –

+0

Stesso. Non ho mai visto l'uso di questo. –

+0

La domanda molto più interessante è: che dire di 'difference',' product' e 'quotient'? (Forse non abbastanza "ovvi" casi d'uso per questo, ma se si usi 'Integer :: sum' o' (a, b) -> (a + b) 'non importa tanto neanche ...) – Marco13

Problemi correlati