Пожалуйста, обратите внимание на следующий фрагмент кода:Как я могу нарисовать список с помощью дженериков в 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;
}
Ответный заявление делает кастинг, который не компилируется. Как преобразовать список myPojos в более общий список, , без необходимости проходить через каждый элемент списка?
Благодаря
2-е решение лучше одного ИМХО. Возвращение диких карт обычно считается плохой практикой, b/c ограничивает клиентский код. В этом случае с ArrayList extends MyInterface> вы могли только читать из списка и не могли ничего добавить к нему. –
Это может быть то, что нужно, конечно - мы просто не знаем. (Это почти наверняка использовать список вместо ArrayList , а также, или, возможно, просто Iterable или Коллекция .) –
+1 для использования более общего типа (например список, коллекция ). Но возвращаемые подстановочные знаки редко бывают то, что вы хотите. Если вы склоняетесь к неизменности, есть лучшие способы сделать это. Нафталин и Вадлер рассказывают об этом в «Java Generics and Collections». –