Tôi có 3 phương pháp:Generics vs Phương pháp quá tải
//1 -- check one item
public static <T> void containsAtLeast(String message,
T expectedItem,
Collection<? extends T> found) {
if (!found.contains(expectedItem))
Assert.fail("...");
}
//2 -- check several items
public static <T> void containsAtLeast(String message,
Collection<? extends T> expectedItems,
Collection<T> found) {
for (T exptetedItem : expectedItems)
containsAtLeast(message, exptetedItem, found);
}
//3 -- check several items, without message parameter
public static <T> void containsAtLeast(Collection<? extends T> expectedItems,
Collection<? extends T> found) {
containsAtLeast(null, expectedItems, found);
}
Tôi hy vọng rằng phương pháp //3
gọi //2
nhưng nó không, nó gọi phương thức //1
. Có một sai lầm trong những gì tôi mong đợi?
* Tôi sử dụng sdk 1.7.0_25 và Eclipse 4.3 *
Ngoài ra, 'T' là tham số kiểu phương thức cho mỗi trường hợp trong trường hợp này, vì vậy tất cả ba khai báo về cơ bản là độc lập với nhau. –
Nhưng tại sao phương pháp đầu tiên được gọi là? Nếu 'T' trong' \\ 1' giống với 'Bộ sưu tập extends T>' trong '\\ 3', thì' tìm thấy' trong '\\ 1' phải thuộc loại' Bộ sưu tập mở rộng > 'trong' \\ 3'? Tôi đang ở đâu? –
@assylias: Cảm ơn bạn: Tôi đã hoàn toàn bỏ qua chi tiết này. - Vì vậy, sau khi thêm ' extends T>' cho 'tìm thấy' trong' // 2', nó bắt đầu hoạt động như mong đợi – Ralph