Sau khi cố gắng hiểu các khái niệm tại Spring MVC, tôi đã xem qua biểu thức Collection<? extends Book>
mà tôi chưa từng thấy trước đây. Tôi đã cố gắng tìm ra nó một mình, nhưng tôi thấy không có sự khác biệt giữa việc sử dụng Collection<? extends Book>
và Collection<Book>
. Tôi đoán rằng nó chỉ cho phép mở rộng Sách, nhưng nó cũng cho phép Sách. Vì vậy, đầu đó. Tôi đã thử sử dụng Google, nhưng kể từ đó? là một ký tự đại diện trong google, nó làm cho nó gần như không thể tìm kiếm. Tôi đã tìm kiếm stackoverflow cho câu trả lời, nhưng tất cả các câu hỏi về điều này (chẳng hạn như List<? extends MyType> và <? extends > Java syntax) đã giả định kiến thức của Collection<? extends T>
. Dưới đây là đoạn code mà đã bước đầu hấp dẫn sự quan tâm của tôi:Bộ sưu tập <? extends T> vs Bộ sưu tập <T>
import java.util.ArrayList;
import java.util.Collection;
public class Book {
public static void main(String[] args) {
BookCase bookCase1 = new BookCase();
BookCase bookCase2 = new BookCase(bookCase1);
}
}
class BookCase extends ArrayList<Book> {
public BookCase() {
}
//acts same as public BookCase(Collection<Book> c) {
public BookCase(Collection<? extends Book> c) {
super(c);
}
}
không <? extends T>
làm gì? Nó khác với <T>
như thế nào?
EDIT:
followup câu hỏi: Liệu BookCase extends ArrayList<Book>
nghĩa là BookCase
kéo dài Book
?
Một 'Bộ sưu tập 'là một' Bộ sưu tập mở rộng Sách> 'nhưng không phải là 'Bộ sưu tập '. –
immibis
Lần như thế này, tôi ước tôi có thể đánh dấu chọn nhiều câu trả lời. Cụ thể là câu trả lời của Makoto và Adam. Trong khi tất cả các câu trả lời đều hữu ích, những câu trả lời cụ thể đã giúp tôi hiểu nó. Vì vậy, nếu bạn đang tìm kiếm câu trả lời cho câu hỏi này, tôi khuyên bạn nên đọc cả hai câu hỏi đó ít nhất, bao gồm cả nhận xét. Cảm ơn mọi người!! – Evorlor