2016-07-19 7 views
1

В чем причина такого присвоения?Каково практическое применение задания с использованием шаблона?

List<? extends Fruit> flist = new ArrayList<Apple>(); 
// flist.add(new Apple()); 
// flist.add(new Fruit()); 
// flist.add(new Object()); 

После того, как мы «вентиляционный» контейнер Apple, в контейнере с фруктами, мы не можем добавить что-нибудь в нем.

Я знаю, что мы могли бы сделать что-то вроде:

List<Apple> basket = new ArrayList<Apple>(); 
//Fill the basket with tons of juicy apples 
List<? extends Fruit> fruitContainer = basket; 

И тогда мы могли бы быть в состоянии использовать интерфейс Fruit использовать элементы, принадлежащие fruitContainer. Но что может быть практической причиной сделать что-то подобное, если мы не сможем добавить что-нибудь позже?

List<? extends Fruit> flist = new ArrayList<Apple>(); 

ответ

0

Эта линия принята весь вероятно, не имеет никакого практического применения, но, как вы отметили в своем вопросе, каждый из самых частей его (List<? extends Fruit> flist и new ArrayList<Apple>()), отдельно, имеет практический использовать. Они оба действительны и полезны, просто не в сочетании (если вам не нужно ничего класть в свой список). Вот почему он компилируется, каждая из частей действительна; мы должны, программисты, объединить их разумным и полезным способом.

+0

Вопрос в следующем: зачем программисту делать что-то подобное? Можете ли вы найти реалистичный сценарий? :) – acejazz

+0

@acejazz: Мое первое предложение охватывает это: я не думаю, что есть какая-то практическая причина для этого (если, как я уже сказал, вам фактически не нужно ничего добавлять в список). –

Смежные вопросы