我創建了ArrayList的擴展NullIgnoringArrayList,因爲我的應用程序可能會不時添加空值。我知道有很多其他方法可以解決這個問題,比如在訪問ArrayList時插入或過濾空值之前檢查null。但我認爲這樣做,這樣做很好,但現在我不知道該怎麼做。如何實現ListIterator?
我應該實現ListIterator,因爲我的測試調用了這個方法。我在ArrayList的實現中達到了頂峯,但是ListItr是一個使用ArrayList的私有字段的私有類,我沒有在NullIgnoringArrayList中使用這些私有字段。儘管如此,我可能是過度工程,也許我應該放棄它。另一方面,人們可能會學到一兩件事。
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) {
}
}
我不是很熟悉Java的ArrayList中,但你不能只用現有的o ne,即ArrayList實現的那個?你真的必須實施自己的,非常功能障礙的嗎? –
改爲['AbstractList'](https://docs.oracle.com/javase/8/docs/api/java/util/AbstractList.html)可能會更好。 –