Я пытаюсь изучить подстановочные знаки в Java. Здесь я пытаюсь изменить метод printCollection
, так что он будет принимать только класс, который расширяет AbstractList
. Он показывает ошибку в комментарии. Я попытался использовать объекты ArrayList
, он отлично работает. Я использую Java 7.ArrayList объектов и абстрактных
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
public class Subtype {
void printCollection(Collection<? extends AbstractList<?>> c) {
for (Object e : c) {
System.out.println(e);
}
}
public static void main(String[] args) {
Subtype st= new Subtype();
ArrayList<String> al = new ArrayList<String>();
al.add("a");
al.add("n");
al.add("c");
al.add("f");
al.add("y");
al.add("w");
//The method printCollection(Collection<? extends AbstractList<?>>) in the type Subtype is not applicable for the
// arguments (ArrayList<String>)
st.printCollection(al);
}
}
Есть ли конкретная причина, по которой вы хотели бы разрешить списки, расширяющие 'AbstractList', а не все списки, реализующие интерфейс' List' (контракт)? Указав 'AbstractList', вы связываете свой код с конкретной реализацией. Когда это возможно, вы должны кодировать интерфейсы вместо реализаций. –
@MickMnemonic спасибо, я буду помнить об этом. –