2015-06-09 13 views
19

Tôi chỉ nhận thấy rằng JDK8 giới thiệu phương pháp này cho Integer lớp:Tại sao Java 8 giới thiệu * 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; 
} 

điểm của phương pháp này là gì? Tại sao tôi nên gọi phương thức này thay vì sử dụng toán tử +? Khả năng duy nhất tôi có thể nghĩ đến là, ví dụ, khi trộn chuỗi và ints ý nghĩa + điều hành thay đổi, vì vậy

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

nhưng sử dụng dấu ngoặc đơn sẽ làm việc anyway

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

Trả lời

32

Nó có thể hữu ích như tham chiếu phương thức (Integer::sum) được chuyển đến phương thức yêu cầu giao diện chức năng có liên quan (IntBinaryOperator).

Ví dụ:

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

Tất nhiên, ví dụ này có thể sử dụng .sum() thay vì giảm. Tôi chỉ nhận thấy rằng Javadoc cho IntStream.sum đề cập đến việc giảm chính xác này là tương đương với sum().

+0

Uhm ... đó có lẽ là điều tôi chưa học. –

+0

Tương tự. Tôi chưa bao giờ thấy việc sử dụng điều này. –

+0

Câu hỏi thú vị hơn nhiều là: Điều gì về 'khác biệt',' sản phẩm' và 'quotient'? (Có lẽ không đủ trường hợp sử dụng "rõ ràng" cho điều này. Nhưng liệu có sử dụng 'Integer :: sum' hay' (a, b) -> (a + b) 'không quan trọng quá nhiều ...) – Marco13

Các vấn đề liên quan