2016-05-27 6 views
-1

Я изучаю дженерики прямо сейчас, и, насколько я понимаю, мы используем дженерики, поэтому мы можем избежать/удалить необходимость в броске, так почему мне нужно прикладывать при добавлении элемента и связанного списка?Зачем нужен этот код?

public class ThisIsCode<E> implements Code{ 

    LinkedList<E> list = new LinkedList<>(); 

    public final void add(E... item) { 
     List<E> thingie = new LinkedList<>(); 

     for (E i: item) { 
      thingie.add((E) item); 
     } 

     list.add((E)thingie); 

    } 

Я также должен использовать этот метод, а также в массиве ?? Я не думаю, что я должен помещать элемент в массив, поэтому я немного смущен.

public void addSingle(Object item) { 
    add((E[]) item); 

} 
+2

В таком случае, почему бы не заменить весь метод на 'list.addAll (Arrays.asList (items))' –

ответ

6

Вам не нужно бросок, вы добавляете неправильную вещь. Это

for (E i: item) { 
    thingie.add((E) item); 
} 

должен быть

for (E i: item) { 
    thingie.add(i); 
} 

и

list.add((E)thingie); 

должно быть что-то вроде

list.addAll(thingie); 
+0

О, спасибо вам большое! Варгары для меня действительно новы. В чем разница между list.add() и list.addAll()? – alnmod

+0

['List.addAll (Collection )'] (http://docs.oracle.com/javase/8/docs/api/java/util/List.html#addAll-java.util.Collection-) добавляет каждый элемент из 'Collection' в' list'; ['List.add (E)'] (http://docs.oracle.com/javase/8/docs/api/java/util/List.html#add-E-) - добавить один элемент типа ' E' в 'list'. –

+0

Есть ли что-нибудь, что я могу сделать с добавлением ((E []) item) ;? – alnmod

1

мы используем дженерики, поэтому мы можем избежать/удалить необходимо лить

Это не на 100% верно, мы используем дженерики для type safety. Отсутствие необходимости для кастинга - это лишь одна из многих преимуществ, которые приносят дженерики в таблицу.


Причина вы нуждаясь бросить свои объекты в цикле Еогеасп происходит потому, что вы добавляете item список сам в связанном списке в каждой итерации цикла. То, что вы делаете , - это добавление элементов массива.

Это то, что вы имели в виду сделать:

for (E i: item) { 
    thingie.add(i); 
} 

Причина вы должны бросить свои объекты снова в этой строке: list.add((E)thingie);, потому, что ваше добавление связанного списка в связанном списке - не элементы списков. То, что вы должны делать здесь, - это итерация по всем элементам и добавление их по одному; или использовать один из встроенных методов java.

0

Ваш код уже говорит о том, что

для каждого Е в пункте

. Таким образом, ожидается, что объект вернет объект E. Кроме того, я не уверен. Но код:

for (E i: item) { 
    thingie.add((E) item); 
} 

является supossed быть

for (E i: item) { 
    thingie.add(i); 
} 

Это список E. На основе 3-й линии. Не список массива E. Надеемся, что он дает некоторые пояснения.

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