Giả sử tôi có một phương pháp đơn giản như thế này để xử lý hai danh sách:Java Generics: Suy luận kiểu trên hai tham số
public static <B> void foo(List<B> list1, List<B> list2) {
}
Và giả sử tôi muốn gọi nó như thế này:
foo(ImmutableList.of(), ImmutableList.of(1));
won này Không biên dịch, bởi vì javac
không đủ thông minh để tìm ra tôi đang cố tạo hai danh sách Số nguyên. Thay vào đó, tôi phải viết:
foo(ImmutableList.<Integer>of(), ImmutableList.of(1));
Làm cách nào để thay đổi cách khai báo foo
để cho phép phiên bản đầu tiên hoạt động cũng như phiên bản thứ hai?
Khá chắc là không thể thực hiện bằng cách thay đổi khai báo 'foo()'. –
Trên thực tế, nó không phải là vấn đề của 'javac' không đủ thông minh, đó là câu hỏi thực sự về ý nghĩa của bạn bởi' ImmutableList.of() '. Điều gì xảy ra nếu 'of()' trả về không phải là một danh sách trống nhưng một danh sách chứa đầy 5 đối tượng được tạo với các hàm tạo mặc định? Nó chỉ là nội bộ của 'of()' cho bạn biết đó không phải là trường hợp, và nếu đó là những gì đã xảy ra thì 'foo' sẽ nhận được một danh sách' Object 'và một danh sách' Integer '. –