2015-01-11 61 views
6

Tôi đang thiếu gì? Tại sao tôi phải sử dụng Object::toString bên dưới chứ không phải Integer::toString? Liệu nó có liên quan gì đến việc tẩy xóa kiểu với generics không?Gọi toString qua tham chiếu phương thức trong Java 8

Arrays.asList(1,2,3).stream().map(Integer::toString).forEach(System.out::println); //Won't compile 

Arrays.asList(1,2,3).stream().map(Object::toString).forEach(System.out::println); //Compiles and runs fine 
+2

BTW Bạn chỉ có thể viết 'Arrays.asList (1,2,3). forEach (System.out :: println); 'hoặc' Stream.of (1,2,3) .forEach (System.out :: println); 'hoặc' IntStream.rangeClosed (1, 3) .forEach (Hệ thống. ra :: println); ' –

+0

bản sao có thể có của [Làm thế nào để sửa chữa kiểu tham số trên phương thức tham chiếu Java8 (toString của một số nguyên)] (http://stackoverflow.com/questions/21873829/how-to-fix-ambigous-type -on-java8-method-referen ce-tostring-of-an-integer) – Holger

Trả lời

13

Điều này không liên quan gì đến việc xóa loại.

Nhìn vào thông báo lỗi:

(argument mismatch; invalid method reference 
    reference to toString is ambiguous 
    both method toString(int) in Integer and method toString() in Integer match) 

Lớp Integer có hai toString phương pháp phù hợp với giao diện chức năng dự kiến ​​theo phương pháp map(). Một là tĩnh với đối số int và phương thức kia là phương pháp toString() ghi đè Object 's toString().

Trình biên dịch không biết nếu bạn muốn thực hiện điều này:

Arrays.asList(1,2,3).stream().map(i->Integer.toString(i)).forEach(System.out::println); 

hay này:

Arrays.asList(1,2,3).stream().map(i->i.toString()).forEach(System.out::println); 
+1

cộng với một, cũng được bảo hiểm. –

+1

Bạn có thể sử dụng 'IntStream.of (1, 2, 3) .mapToObj (Integer :: toString) .forEach (System.out :: println);' không rõ ràng như được giải thích [ở đây] (http: // stackoverflow .com/a/21876077/2711488). – Holger

+0

Tôi nhận được một thông báo lỗi khác nhau mặc dù (và có lẽ lý do tại sao tôi không thể hiểu những gì đang xảy ra). Thông báo lỗi mà tôi nhận được (trong IDE) đọc - "map (java.util.function.Function ) trong Stream không thể được áp dụng cho ()" . Ai có thể làm được điều đó? – sat

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