我想扩展ArrayList类以创建一个不包含重复元素的集合,并在内部使用数组来存储。 SetUniqueList
存储唯一元素,但我想添加更多功能。
我陷入方法writeObject
和readObject
。这是ArrayList
中的实现:
private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException{
int expectedModCount = modCount;
s.defaultWriteObject();
s.writeInt(elementData.length);
for (int i=0; i<size; i++)
s.writeObject(elementData[i]);
if (modCount != expectedModCount) {
throw new ConcurrentModificationException();
}
}
private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException {
s.defaultReadObject();
int arrayLength = s.readInt();
Object[] a = elementData = new Object[arrayLength];
for (int i=0; i<size; i++)
a[i] = s.readObject();
}
显然我无法访问private transient Object[] elementData;
。我很困惑,我应该创建像ArrayList
这样的课程,而不是扩展它,或者还有其他任何一种艺术方法可以做到这一点吗?
我需要使用subList
,以便子列表中的更改会反映在此列表中。
答案 0 :(得分:1)
我可以考虑在readObject
的子类上实现writeObject
和ArrayList
的几种方法:
使用反射来调用ArrayList
中的私有方法(讨厌!!但可能是合理的。)。
使用super.iterator()
etctera迭代readObject
方法中的元素。
但是,我认为最好将ArrayList
的子类转换为将操作委派给真实ArrayList
的包装类。只需确保包装类为Serializable
,并且包含对包装列表的引用的私有变量未标记为transient
。)
LinkedHashSet
可能是另一种选择......取决于如何使用该集合。