всем привет.
Прошу разъяснить две детали:
1. зачем сериализовывать / десирализовывать размер мапы?
2. почему не работает реализация через for -each?
//сериализация
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
out.writeInt(HashMapReflectionHelper.callHiddenMethod(map, "capacity"));
out.writeFloat(HashMapReflectionHelper.callHiddenMethod(map, "loadFactor"));
for(E e: map.keySet()){
out.writeObject(e);
}
}
//десерилизация
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
map = new HashMap(in.readInt(), in.readFloat());
E e;
while ((e = in.readObject()) != null ){
map.put(e, PRESENT);
}
}
}
package com.javarush.task.task37.task3707;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
public class HashMapReflectionHelper {
public static <T> T callHiddenMethod(HashMap map, String methodName) {
try {
Method method = map.getClass().getDeclaredMethod(methodName);
method.setAccessible(true);
return (T) method.invoke(map);
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException ignored) {
}
return null;
}
}