Trong khi đọc hướng dẫn chính thức của Java về generics, tôi thấy rằng bạn có thể hạn chế đối số kiểu (trong trường hợp này là T
) để mở rộng một lớp và / hoặc nhiều giao diện hơn với toán tử 'và' ( &
) như sau:
<T extends MyClass & Serializable>
Tôi đã thay thế &
bằng,
(do nhầm lẫn và vẫn hoạt động, với một cảnh báo nhỏ).
Câu hỏi của tôi là, có sự khác biệt nào giữa hai điều này:
<T extends MyClass & Serializable>
<T extends MyClass , Serializable> // here is with comma
Và phương pháp ví dụ:
static <T extends MyClass & Serializable> ArrayList<T> fromArrayToCollection(T[] a) {
ArrayList<T> arr = new ArrayList<T>();
for (T o : a) {
arr.add(o); // Correct
}
return arr;
}
5
@Doorknob bạn đang giả sử OP đang sử dụng bàn phím và bàn phím giống như bạn đang sử dụng.
—
emory
@emory Tôi nghĩ ngay cả điều đó cũng sai hướng - lỗi không phải ở ngón tay mà ở bộ não của anh ấy. Tương tự như thể bạn đã cố gắng sử dụng 'bao gồm' thay vì 'nhập' trong tệp nguồn Java. Bạn đã gõ nhầm 'bao gồm', bởi vì não của bạn bảo bạn nhập sai, có thể vì nhiều lý do.
—
Nick Pickering
@Nicholas Pickering, là đúng! Đối với tôi, đó không phải là gõ nhầm do bàn phím, mà là do bộ não. Khi bạn viết các giao diện mà một lớp triển khai, bạn phân tách chúng bằng dấu phẩy.
—
Alin Ciocan