Có phương pháp đơn giản sau đây trong Java 8:Tại sao ngữ cảnh là tĩnh trong ví dụ dòng Java 8 này?
public void test(){
Stream<Integer> stream = Stream.of(1,2,3);
stream.map(Integer::toString);
}
và tôi nhận được hai lỗi:
java: loại không tương thích: không thể suy ra kiểu biến (s) R (lập luận không phù hợp; không hợp lệ phương pháp tham khảo
tham chiếu đến toString là mơ hồ cả phương thức toString (int) trong java.lang.Integer và phương thức toString() trong java.lang.Integer
và:
phương pháp tham khảo không hợp lệ không tĩnh phương thức toString() có thể không được tham chiếu từ một bối cảnh tĩnh
Lỗi đầu tiên là dễ hiểu, Integer lớp có hai phương pháp:
public static String toString(int i)
public String toString()
và trình biên dịch không thể suy ra tham chiếu phương pháp mong muốn.
Nhưng liên quan đến ngữ cảnh thứ hai, bối cảnh tĩnh mà trình biên dịch tham chiếu đến ở đâu?
Lỗi có liên quan đến phương thức toString() của lớp Integer không tĩnh, nhưng tại sao ngữ cảnh mà tôi gọi phương thức đó bằng ánh xạ() là tĩnh?
Còn một câu hỏi khác, nếu trình biên dịch phải giải quyết sự mơ hồ giữa hai phương pháp mà một nguyên nhân gây ra lỗi thời gian biên dịch thì không nên chọn phương thức khác?
Tôi không hiểu - bạn gặp lỗi thứ hai như thế nào? Bạn có sửa đổi mã của bạn bằng cách nào đó sau khi nhận được lỗi đầu tiên? –
Lưu ý rằng luồng của bạn không bị chấm dứt. Làm điều đó có thể giúp trình biên dịch. –
Lỗi thứ hai có thể chỉ là một tác dụng phụ của việc không giải quyết được lỗi đầu tiên. – khelwood