Ich habe diese Erweiterung von ArrayList, NullIgnoringArrayList erstellt, weil es möglich ist, dass meine Anwendung von Zeit zu Zeit Nullen hinzufügt. Ich weiß, dass es verschiedene andere Möglichkeiten gibt, dies zu tun, wie die Überprüfung auf Null, bevor Nullen eingefügt oder ausgefiltert werden, wenn auf die ArrayList zugegriffen wird. Aber ich habe es in meinem Kopf, es so zu machen und es lief gut, aber jetzt weiß ich nicht weiter.Wie implementiere ich ListIterator?
Ich sollte ListIterator implementieren, weil meine Tests diese Methode aufrufen. Ich habe in der Implementierung in ArrayList einen Höhepunkt erreicht, aber dort ist ListItr eine private Klasse, die die privaten Felder von ArrayList verwendet, die ich in NullIgnoringArrayList nicht habe.
Um ehrlich zu sein, könnte ich vielleicht overengineering und vielleicht sollte ich es einfach fallen lassen. Auf der anderen Seite könnte man etwas lernen.
NullIgnoringArrayList:
public class NullIgnoringArrayList<T> extends ArrayList<T> {
@Override
public boolean add(T element) {
return !isNull(element) && super.add(element);
}
@Override
public void add(int index, T element) {
if (isNull(element)) {
return;
}
super.add(index, element);
}
@Override
public boolean addAll(Collection c) {
return !isNull(c) && super.addAll(c);
}
@Override
public boolean addAll(int index, Collection c) {
return !isNull(c) && super.addAll(index, c);
}
@Override
public ListIterator listIterator() {
throw new NotImplementedException();
}
@Override
public ListIterator listIterator(int index) {
throw new NotImplementedException();
}
}
SimpleListIterator:
public class SimpleListIterator<T> implements ListIterator {
@Override
public boolean hasNext() {
return false;
}
@Override
public Object next() {
return null;
}
@Override
public boolean hasPrevious() {
return false;
}
@Override
public Object previous() {
return null;
}
@Override
public int nextIndex() {
return 0;
}
@Override
public int previousIndex() {
return 0;
}
@Override
public void remove() {
}
@Override
public void set(Object o) {
}
@Override
public void add(Object o) {
}
}
Ich bin nicht sehr vertraut mit Java Arraylist, aber Kannst du nicht einfach das vorhandene o benutzen? ne, d. h. die, die ArrayList implementiert? Müssen Sie wirklich Ihre eigenen, schrecklich dysfunktionalen implementieren? –
Es könnte besser sein, stattdessen ['AbstractList'] (https://docs.oracle.com/javase/8/docs/api/java/util/AbstractList.html) zu erweitern. –