Nếu bạn có nghĩa là hạng A thực hiện IA, chứ không phải là IB, sau đó mã của bạn nên được tốt nói
for (A item : list) {
// handle item as if it is an IA
}
vì tất cả Như, theo định nghĩa IAs.
Trong khi đó, không có ký tự đại diện cho <? implements C>
. Có <? extends C>
và C
có thể là một giao diện hoặc một lớp học; tuy nhiên, điều này là không cần thiết cho những gì bạn có vẻ đang cố gắng làm.
Nếu bạn muốn nói rõ ràng for (IA item : list)
vì bạn không đảm bảo rằng các mục trong danh sách đó là A
s, nhưng đảm bảo rằng chúng là IA
s, thì tôi nghĩ bạn có vấn đề nhỏ (tôi không thể nói chắc chắn, vì bạn không nói vị trí mã xử lý danh sách này nằm ở đâu). A List<A>
là không a List<IA>
theo định nghĩa; nếu bạn đang xây dựng một List<A>
và sau đó chuyển nó đến một phương thức mong đợi một List<IA>
, bạn sẽ nhận được một lỗi thời gian biên dịch. Tuy nhiên, bạn có thể tạo một List<IA>
và điền vào nó với A
s. Lý do cho điều này được giải thích trong hướng dẫn của Java về Generics.
Nguồn
2009-09-22 15:21:58
Bạn có nghĩa là IA? khi bạn nói IB? – OscarRyz