Hãy xem xét các đoạn mã sau:Làm thế nào tôi có thể truyền một danh sách bằng Generics trong Java?
public interface MyInterface {
public int getId();
}
public class MyPojo implements MyInterface {
private int id;
public MyPojo(int id) {
this.id = id;
}
public int getId() {
return id;
}
}
public ArrayList<MyInterface> getMyInterfaces() {
ArrayList<MyPojo> myPojos = new ArrayList<MyPojo>(0);
myPojos.add(new MyPojo(0));
myPojos.add(new MyPojo(1));
return (ArrayList<MyInterface>) myPojos;
}
Lệnh return hiện một đúc mà không biên dịch. Làm cách nào để chuyển đổi danh sách myPojos thành danh sách chung chung hơn, mà không cần phải đi qua từng mục trong danh sách?
Cảm ơn
Giải pháp thứ hai tốt hơn một IMHO. Trả lại thẻ hoang dã thường được coi là thực hành xấu, b/c nó hạn chế mã khách hàng. Trong trường hợp này với ArrayList mở rộng MyInterface> bạn chỉ có thể đọc từ danh sách và không thể thêm bất kỳ thứ gì vào danh sách đó. –
Đó có thể là những gì mong muốn, tất nhiên - chúng tôi không biết. (Nó gần như chắc chắn nên sử dụng Danh sách thay vì ArrayList là tốt, hoặc có thể chỉ Iterable hoặc Bộ sưu tập .) –
1 cho việc sử dụng các loại chung chung hơn (ví dụ Danh sách, Bộ sưu tập ). Nhưng trở về ký tự đại diện là hiếm khi những gì bạn muốn. Nếu bạn đang nghiêng về phía bất biến, có những cách tốt hơn để làm điều đó. Naftalin & Wadler nói về điều này trong "Java Generics and Collections". –