2015-05-08 37 views
5

JLS 15.13 lists examples biểu thức tham chiếu phương thức. Một trong số đó làVí dụ về phương pháp tham chiếu phương pháp trong JLS

(test ? list.replaceAll(String::trim) : list) :: iterator

mà không có ý nghĩa kể từ replaceAllvoid. Tôi có hiểu nhầm điều gì đó hoặc đây có phải là lỗi trong JLS (có lẽ phiên bản cũ hơn của replaceAll đã trả lại danh sách kết quả)?

+3

Có, hoàn toàn trông giống như một lỗi. –

Trả lời

3

Về mặt kỹ thuật, nó không được chỉ định trong JLS rằng biến số list có loại java.util.List. Vì vậy, mã này có thể được biên dịch với một số loại tùy chỉnh:

public static class MyList implements Iterable<String> { 
    private final List<String> list = new ArrayList<>(); 

    public MyList add(String val) { 
     list.add(val); 
     return this; 
    } 

    public MyList replaceAll(UnaryOperator<String> op) { 
     list.replaceAll(op); 
     return this; 
    } 

    public Iterator<String> iterator() { 
     return list.iterator(); 
    } 
} 

public Supplier<Iterator<String>> it(MyList list, boolean test) { 
    return (test ? list.replaceAll(String::trim) : list) :: iterator; 
} 

Nhưng nói chung có vẻ như chúng định làm ví dụ dựa trên java.util.List. Do đó có lẽ tốt nhất là thay thế nó bằng một thứ dựa trên JDK.

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